Compare commits
3 Commits
71975600d0
...
4656db39bf
Author | SHA1 | Date |
---|---|---|
Tiago Garcia | 4656db39bf | |
Tiago Garcia | 558846b520 | |
Tiago Garcia | 3cd7d84df5 |
|
@ -0,0 +1,25 @@
|
||||||
|
#include <detpic32.h>
|
||||||
|
|
||||||
|
const unsigned int dis7Scodes[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D,
|
||||||
|
0xFD, 0x07, 0x7F, 0x6F, 0x77, 0xFC,
|
||||||
|
0x39, 0x5E, 0xF9, 0xF1};
|
||||||
|
|
||||||
|
void delay(unsigned int ms) {
|
||||||
|
resetCoreTimer();
|
||||||
|
while (readCoreTimer() < 20000 * ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
TRISB &= 0x80FF;
|
||||||
|
TRISB |= 0x000F;
|
||||||
|
TRISD &= 0xFF9F;
|
||||||
|
|
||||||
|
LATD = (LATD & 0xFF9F) | 0x0040;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
char c = PORTB & 0x000F;
|
||||||
|
LATB = (LATB & 0x80FF) | dis7Scodes[c] << 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Binary file not shown.
|
@ -0,0 +1,26 @@
|
||||||
|
#include <detpic32.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
TRISBbits.TRISB4 = 1; // RB4 digital output disconnected
|
||||||
|
AD1PCFGbits.PCFG4 = 0; // RB4 configured as analog input (AN4)
|
||||||
|
AD1CON1bits.SSRC = 7; // Conversion trigger selection bits: in this
|
||||||
|
// mode an internal counter ends sampling and
|
||||||
|
// starts conversion
|
||||||
|
AD1CON1bits.CLRASAM = 1; // Stop conversions when the 1st A/D converter
|
||||||
|
// interrupt is generated. At the same time, hardware
|
||||||
|
// clears the ASAM bit
|
||||||
|
AD1CON3bits.SAMC = 16; // Sample time is 16 TAD (TAD = 100 ns)
|
||||||
|
AD1CON2bits.SMPI = 0; // Interrupt is generated after 1 sample
|
||||||
|
AD1CHSbits.CH0SA = 4; // Selects AN4 as input for the A/D converter
|
||||||
|
AD1CON1bits.ON = 1; // Enable A/D converter
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
AD1CON1bits.ASAM = 1; // Start conversion
|
||||||
|
while (IFS1bits.AD1IF == 0); // Wait while conversion not done
|
||||||
|
printInt(ADC1BUF0, 16 | 3 << 16); // Print ADC1BUF0 value
|
||||||
|
putChar('\r');
|
||||||
|
IFS1bits.AD1IF = 0; // Reset AD1IF
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
#include <detpic32.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
TRISBbits.TRISB4 = 1;
|
||||||
|
AD1PCFGbits.PCFG4 = 0;
|
||||||
|
AD1CON1bits.SSRC = 7;
|
||||||
|
AD1CON1bits.CLRASAM = 1;
|
||||||
|
AD1CON3bits.SAMC = 16;
|
||||||
|
AD1CON2bits.SMPI = 0;
|
||||||
|
AD1CHSbits.CH0SA = 4;
|
||||||
|
AD1CON1bits.ON = 1;
|
||||||
|
TRISDbits.TRISD11 = 0;
|
||||||
|
|
||||||
|
volatile int aux;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
AD1CON1bits.ASAM = 1;
|
||||||
|
LATDbits.LATD11 = 1;
|
||||||
|
while (IFS1bits.AD1IF == 0);
|
||||||
|
LATDbits.LATD11 = 0;
|
||||||
|
aux = ADC1BUF0;
|
||||||
|
IFS1bits.AD1IF = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
#include <detpic32.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
TRISBbits.TRISB4 = 1; // RB4 digital output disconnected
|
||||||
|
AD1PCFGbits.PCFG4 = 0; // RB4 configured as analog input (AN4)
|
||||||
|
AD1CON1bits.SSRC = 7; // Conversion trigger selection bits: in this
|
||||||
|
// mode an internal counter ends sampling and
|
||||||
|
// starts conversion
|
||||||
|
AD1CON1bits.CLRASAM = 1; // Stop conversions when the 1st A/D converter
|
||||||
|
// interrupt is generated. At the same time, hardware
|
||||||
|
// clears the ASAM bit
|
||||||
|
AD1CON3bits.SAMC = 16; // Sample time is 16 TAD (TAD = 100 ns)
|
||||||
|
AD1CON2bits.SMPI = 15; // Interrupt is generated after 16 samples
|
||||||
|
AD1CHSbits.CH0SA = 4; // Selects AN4 as input for the A/D converter
|
||||||
|
AD1CON1bits.ON = 1; // Enable A/D converter
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
AD1CON1bits.ASAM = 1; // Start conversion
|
||||||
|
while (IFS1bits.AD1IF == 0); // Wait while conversion not done
|
||||||
|
int *p = (int *)(&ADC1BUF0);
|
||||||
|
for (; p <= (int *)(&ADC1BUFF); p+=4) {
|
||||||
|
printInt(*p, 10 | 4 << 16); // Print ADC1BUF0 value
|
||||||
|
putChar(' ');
|
||||||
|
}
|
||||||
|
putChar('\r');
|
||||||
|
IFS1bits.AD1IF = 0; // Reset AD1IF
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
#include <detpic32.h>
|
||||||
|
|
||||||
|
#define SAMPLES 16
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
TRISBbits.TRISB4 = 1; // RB4 digital output disconnected
|
||||||
|
AD1PCFGbits.PCFG4 = 0; // RB4 configured as analog input (AN4)
|
||||||
|
AD1CON1bits.SSRC = 7; // Conversion trigger selection bits: in this
|
||||||
|
// mode an internal counter ends sampling and
|
||||||
|
// starts conversion
|
||||||
|
AD1CON1bits.CLRASAM = 1; // Stop conversions when the 1st A/D converter
|
||||||
|
// interrupt is generated. At the same time, hardware
|
||||||
|
// clears the ASAM bit
|
||||||
|
AD1CON3bits.SAMC = 16; // Sample time is 16 TAD (TAD = 100 ns)
|
||||||
|
AD1CON2bits.SMPI = SAMPLES - 1; // Interrupt is generated after 16 samples
|
||||||
|
AD1CHSbits.CH0SA = 4; // Selects AN4 as input for the A/D converter
|
||||||
|
AD1CON1bits.ON = 1; // Enable A/D converter
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
AD1CON1bits.ASAM = 1; // Start conversion
|
||||||
|
while (IFS1bits.AD1IF == 0); // Wait while conversion not done
|
||||||
|
int total = 0;
|
||||||
|
int *p = (int *)(&ADC1BUF0);
|
||||||
|
for (; p <= (int *)(&ADC1BUFF); p+=4)
|
||||||
|
total += *p;
|
||||||
|
int val_ad = total / SAMPLES;
|
||||||
|
int v = (val_ad * 33 + 511) / 1023;
|
||||||
|
printStr("VAL_AD value: ");
|
||||||
|
printInt(val_ad, 10 | 4 << 16); // Print ADC1BUF0 value
|
||||||
|
printStr(" | V value: ");
|
||||||
|
printInt(v, 10 | 4 << 16); // Print ADC1BUF0 value
|
||||||
|
putChar('\r');
|
||||||
|
IFS1bits.AD1IF = 0; // Reset AD1IF
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
#include <detpic32.h>
|
||||||
|
|
||||||
|
#define SAMPLES 4
|
||||||
|
|
||||||
|
const unsigned int dis7Scodes[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D,
|
||||||
|
0xFD, 0x07, 0x7F, 0x6F, 0x77, 0xFC,
|
||||||
|
0x39, 0x5E, 0xF9, 0xF1};
|
||||||
|
|
||||||
|
typedef enum { HIGH, LOW } flag;
|
||||||
|
|
||||||
|
unsigned char toBdc(unsigned char value) {
|
||||||
|
return ((value / 10) << 4) + (value % 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
void send2displays(unsigned char value) {
|
||||||
|
static flag f = LOW;
|
||||||
|
value = toBdc(value);
|
||||||
|
unsigned char high = dis7Scodes[value >> 4];
|
||||||
|
unsigned char low = dis7Scodes[value & 0x0F];
|
||||||
|
|
||||||
|
if (f == HIGH) {
|
||||||
|
LATD = (LATD & 0xFF9F) | 0x0040;
|
||||||
|
LATB = (LATB & 0x80FF) | high << 8;
|
||||||
|
f = LOW;
|
||||||
|
} else {
|
||||||
|
LATD = (LATD & 0xFF9F) | 0x0020;
|
||||||
|
LATB = (LATB & 0x80FF) | low << 8;
|
||||||
|
f = HIGH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void delay(unsigned int ms) {
|
||||||
|
resetCoreTimer();
|
||||||
|
while (readCoreTimer() < ms * 20000);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
TRISBbits.TRISB4 = 1; // RB4 digital output disconnected
|
||||||
|
AD1PCFGbits.PCFG4 = 0; // RB4 configured as analog input (AN4)
|
||||||
|
AD1CON1bits.SSRC = 7; // Conversion trigger selection bits: in this
|
||||||
|
// mode an internal counter ends sampling and
|
||||||
|
// starts conversion
|
||||||
|
AD1CON1bits.CLRASAM = 1; // Stop conversions when the 1st A/D converter
|
||||||
|
// interrupt is generated. At the same time, hardware
|
||||||
|
// clears the ASAM bit
|
||||||
|
AD1CON3bits.SAMC = 16; // Sample time is 16 TAD (TAD = 100 ns)
|
||||||
|
AD1CON2bits.SMPI = SAMPLES - 1; // Interrupt is generated after 16 samples
|
||||||
|
AD1CHSbits.CH0SA = 4; // Selects AN4 as input for the A/D converter
|
||||||
|
AD1CON1bits.ON = 1; // Enable A/D converter
|
||||||
|
|
||||||
|
TRISB &= 0x80FF; // Configure RB8-RB14 as outputs
|
||||||
|
TRISD &= 0xFF9F; // Configure RD5-RD6 as outputs
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
int v = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (i == 0){
|
||||||
|
AD1CON1bits.ASAM = 1; // Start conversion
|
||||||
|
while (IFS1bits.AD1IF == 0); // Wait while conversion not done
|
||||||
|
int total = 0;
|
||||||
|
int *p = (int *)(&ADC1BUF0);
|
||||||
|
for (; p <= (int *)(&ADC1BUFF); p+=4)
|
||||||
|
total += *p;
|
||||||
|
int val_ad = total / SAMPLES;
|
||||||
|
v = (val_ad * 33 + 511) / 1023;
|
||||||
|
}
|
||||||
|
send2displays(v);
|
||||||
|
delay(10);
|
||||||
|
|
||||||
|
i = (i + 1) % 20;
|
||||||
|
|
||||||
|
IFS1bits.AD1IF = 0; // Reset AD1IF
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,13 @@
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
Sample JAVA project for MAS demonstrating an object-oriented implementation
|
||||||
|
Can be opened with Visual Studio Code.
|
||||||
|
|
||||||
|
Run `DemoClass` to start the program.
|
||||||
|
|
||||||
|
## Folder Structure
|
||||||
|
|
||||||
|
The workspace contains:
|
||||||
|
- `src`: the folder with the source code
|
||||||
|
The compiled output files will be generated in the `bin` folder by default.
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,128 @@
|
||||||
|
import ementas.*;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* entry point da aplicação
|
||||||
|
* o código principal está na subpasta ementas
|
||||||
|
*/
|
||||||
|
public class DemoClass {
|
||||||
|
|
||||||
|
static final Random randomizer = new Random();
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
System.out.println("\n\nA preparar os dados aleatórios...");
|
||||||
|
Ementa ementadeHoje = gerarEmentaAleatoria("Menu Primavera", "Loja 1");
|
||||||
|
|
||||||
|
System.out.println("\n\nEmenta para hoje:" + ementadeHoje);
|
||||||
|
|
||||||
|
// criar um pedido de exemplo
|
||||||
|
Cliente cliente = new Cliente("Joao Pinto", "PT120200200");
|
||||||
|
Pedido pedido = new Pedido(cliente, LocalDateTime.now());
|
||||||
|
|
||||||
|
// adiciona um prato à sorte, da ementa do dia
|
||||||
|
Prato opcao = ementadeHoje.listarPrato(sortearUmPrato());
|
||||||
|
pedido.adicionarPrato(opcao);
|
||||||
|
|
||||||
|
// adiciona outro prato à sorte, da ementa do dia
|
||||||
|
opcao = ementadeHoje.listarPrato(sortearUmPrato());
|
||||||
|
pedido.adicionarPrato(opcao);
|
||||||
|
|
||||||
|
System.out.println("\n\n__Pedido gerado__");
|
||||||
|
System.out.println("Pedido: " + pedido);
|
||||||
|
Double precoTotal = pedido.calcularTotal();
|
||||||
|
System.out.println("Preço do Pedido: " + precoTotal);
|
||||||
|
Double calorias = pedido.calcularCalorias();
|
||||||
|
System.out.println("Calorias do Pedido: " + calorias);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* retorna uma ordem na ementa (e.g. 3º opção da ementa)
|
||||||
|
*/
|
||||||
|
private static int sortearUmPrato() {
|
||||||
|
return (randomizer.nextInt(Ementa.NR_PRATOS_NA_EMENTA));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Gera uma ementa, com a designação fornecida em parâmetro, e acrescenta
|
||||||
|
* alguns pratos aleatoriamente.
|
||||||
|
*/
|
||||||
|
private static Ementa gerarEmentaAleatoria(String designacao, String local) {
|
||||||
|
Ementa ementa = new Ementa(designacao, local, LocalDateTime.now());
|
||||||
|
|
||||||
|
for (int nrOpcaoPrato = 0; nrOpcaoPrato < Ementa.NR_PRATOS_NA_EMENTA; nrOpcaoPrato++) {
|
||||||
|
|
||||||
|
Prato prato = gerarPratoAleatorio(nrOpcaoPrato + 1);
|
||||||
|
System.out.println("A gerar .. " + prato);
|
||||||
|
|
||||||
|
// Adiciona 2 ingredientes a cada prato
|
||||||
|
int nrIngrediente = 1;
|
||||||
|
do {
|
||||||
|
Alimento aux = escolherUmAlimentoAleatorio();
|
||||||
|
|
||||||
|
if (prato.adicionarIngrediente(aux)) {
|
||||||
|
System.out.println("\tIngrediente " + nrIngrediente + " adicionado: " + aux);
|
||||||
|
nrIngrediente++;
|
||||||
|
} else
|
||||||
|
System.out.println("\tERRO: ingrediente sorteado nao é adequado " + nrIngrediente + ": " + aux);
|
||||||
|
|
||||||
|
} while (nrIngrediente < 3);
|
||||||
|
|
||||||
|
ementa.addPrato(prato);
|
||||||
|
}
|
||||||
|
return ementa;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Gera uma ocorrencia de Alimento, com dados aleatorios
|
||||||
|
*/
|
||||||
|
public static Alimento escolherUmAlimentoAleatorio() {
|
||||||
|
|
||||||
|
Alimento resultado;
|
||||||
|
switch (randomizer.nextInt(4)) {
|
||||||
|
case 0:
|
||||||
|
resultado = new Carne(VariedadeCarne.FRANGO, 22.3, 345.3, 300);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
resultado = new Peixe(TipoPeixe.CONGELADO, 31.3, 25.3, 200);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
resultado = new Legume("Couve Flor", 21.3, 22.4, 150);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
resultado = new Cereal("Milho", 19.3, 32.4, 110);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return resultado;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Gera uma ocorrencia de Prato, com dados aleatorios
|
||||||
|
*/
|
||||||
|
public static Prato gerarPratoAleatorio(int i) {
|
||||||
|
Prato resultado;
|
||||||
|
switch (randomizer.nextInt(3)) {
|
||||||
|
case 0:
|
||||||
|
resultado = new Prato("Combinado n." + i, 100.0);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
resultado = new PratoVegetariano("Vegetariano n." + i, 120.0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
resultado = new PratoDieta("Dieta n." + i, 200, 90.8);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return resultado;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static Alimento randAlimento() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
public class Alimento {
|
||||||
|
private double proteinas;
|
||||||
|
private double calorias;
|
||||||
|
private double peso;
|
||||||
|
|
||||||
|
|
||||||
|
public Alimento(double proteinas, double calorias, double peso) {
|
||||||
|
super();
|
||||||
|
this.proteinas = proteinas;
|
||||||
|
this.calorias = calorias;
|
||||||
|
this.peso = peso;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getProteinas() {
|
||||||
|
return proteinas;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProteinas(double proteinas) {
|
||||||
|
this.proteinas = proteinas;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getCalorias() {
|
||||||
|
return calorias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCalorias(double calorias) {
|
||||||
|
this.calorias = calorias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getPeso() {
|
||||||
|
return peso;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPeso(double peso) {
|
||||||
|
this.peso = peso;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Alimento [proteinas=" + proteinas + ", calorias=" + calorias + ", peso=" + peso + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
public class Carne extends Alimento {
|
||||||
|
private VariedadeCarne variedade;
|
||||||
|
|
||||||
|
public Carne(VariedadeCarne variedade, double proteinas, double calorias, double peso) {
|
||||||
|
super(proteinas, calorias, peso);
|
||||||
|
this.variedade = variedade;
|
||||||
|
}
|
||||||
|
|
||||||
|
public VariedadeCarne getVariedade() {
|
||||||
|
return variedade;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVariedade(VariedadeCarne variedade) {
|
||||||
|
this.variedade = variedade;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Carne [variedade=" + variedade + "; " + super.toString() + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
public class Cereal extends Alimento {
|
||||||
|
private String nome;
|
||||||
|
|
||||||
|
public Cereal(String nome, double proteinas, double calorias, double peso) {
|
||||||
|
super(proteinas, calorias, peso);
|
||||||
|
this.nome = nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNome() {
|
||||||
|
return nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNome(String nome) {
|
||||||
|
this.nome = nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Cereal [nome=" + nome + "; " + super.toString() + "]";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cliente que coloca novas encomendas/pedidos
|
||||||
|
*/
|
||||||
|
public class Cliente {
|
||||||
|
|
||||||
|
private String nome;
|
||||||
|
private String nif;
|
||||||
|
|
||||||
|
public Cliente(String nome, String nif) {
|
||||||
|
this.setNome(nome);
|
||||||
|
this.setNif(nif);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Cliente = " + getNome() + ", " + getNif();
|
||||||
|
}
|
||||||
|
|
||||||
|
public java.lang.String getNome() {
|
||||||
|
return this.nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNome(java.lang.String value) {
|
||||||
|
this.nome = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNif() {
|
||||||
|
return nif;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNif(String nif) {
|
||||||
|
this.nif = nif;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,80 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Ementa {
|
||||||
|
|
||||||
|
public static final int NR_PRATOS_NA_EMENTA = 4;
|
||||||
|
|
||||||
|
private String nome;
|
||||||
|
private String local;
|
||||||
|
private final List<Prato> pratos;
|
||||||
|
|
||||||
|
private final LocalDateTime dia;
|
||||||
|
|
||||||
|
public Ementa(String nome, String local, LocalDateTime dia) {
|
||||||
|
this.nome = nome;
|
||||||
|
this.local = local;
|
||||||
|
this.dia = dia;
|
||||||
|
this.pratos = new ArrayList<Prato>(); // inicia uma lista vazia
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getNome() {
|
||||||
|
return nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNome(String nome) {
|
||||||
|
this.nome = nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLocal() {
|
||||||
|
return local;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocal(String local) {
|
||||||
|
this.local = local;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
|
||||||
|
builder.append("Ementa [nome=" + nome + ", local=" + local + ", dia " + DateTimeFormatter.ISO_LOCAL_DATE.format(dia) + "]\n");
|
||||||
|
for (Prato prato : pratos) {
|
||||||
|
builder.append("\t");
|
||||||
|
builder.append(prato.getNome());
|
||||||
|
builder.append("\t");
|
||||||
|
builder.append(prato.getPreco());
|
||||||
|
builder.append("\n");
|
||||||
|
}
|
||||||
|
builder.append("]");
|
||||||
|
return builder.toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getTotalEmenta() {
|
||||||
|
double sum = 0;
|
||||||
|
for (Prato prato : pratos) {
|
||||||
|
sum += prato.getPreco();
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPrato(Prato prato) {
|
||||||
|
pratos.add(prato);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Prato listarPrato(int ordem) {
|
||||||
|
return pratos.get(ordem);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void listarPratos() {
|
||||||
|
// ainda não foi implementado
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
public class Legume extends Alimento {
|
||||||
|
private String nome;
|
||||||
|
|
||||||
|
public Legume(String nome, double proteinas, double calorias, double peso) {
|
||||||
|
super(proteinas, calorias, peso);
|
||||||
|
this.nome = nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNome() {
|
||||||
|
return nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNome(String nome) {
|
||||||
|
this.nome = nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Legume [nome=" + nome + "; " + super.toString() + "]";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
public class OvoLacto extends Alimento {
|
||||||
|
|
||||||
|
public OvoLacto(double proteinas, double calorias, double peso) {
|
||||||
|
super(proteinas, calorias, peso);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* representa um pedido de um cliente
|
||||||
|
*/
|
||||||
|
public class Pedido {
|
||||||
|
private final Cliente cliente;
|
||||||
|
private final List<Prato> opcoes;
|
||||||
|
private LocalDateTime hora;
|
||||||
|
|
||||||
|
public Pedido(Cliente cliente, LocalDateTime hora) {
|
||||||
|
this.cliente = cliente;
|
||||||
|
this.hora = hora;
|
||||||
|
opcoes = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
|
||||||
|
builder.append(cliente);
|
||||||
|
builder.append("\n");
|
||||||
|
for (Prato prato : opcoes) {
|
||||||
|
builder.append("\t prato: ");
|
||||||
|
builder.append(prato);
|
||||||
|
builder.append("\n");
|
||||||
|
}
|
||||||
|
builder.append("datahora=");
|
||||||
|
builder.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(hora));
|
||||||
|
builder.append("]");
|
||||||
|
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public double calcularTotal() {
|
||||||
|
double parcial;
|
||||||
|
double total = 0;
|
||||||
|
for (Prato prato : opcoes) {
|
||||||
|
parcial = prato.getPreco();
|
||||||
|
total = total + parcial;
|
||||||
|
}
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double calcularCalorias() {
|
||||||
|
double parcial;
|
||||||
|
double total = 0;
|
||||||
|
for (Prato prato : opcoes) {
|
||||||
|
parcial = prato.totalCalorias();
|
||||||
|
total = total + parcial;
|
||||||
|
}
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHora(java.time.LocalDateTime value) {
|
||||||
|
this.hora = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void adicionarPrato(Prato pratoEscolhido) {
|
||||||
|
opcoes.add(pratoEscolhido);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
public class Peixe extends Alimento {
|
||||||
|
private TipoPeixe tipo;
|
||||||
|
|
||||||
|
public Peixe(TipoPeixe tipo, double proteinas, double calorias, double peso) {
|
||||||
|
super(proteinas, calorias, peso);
|
||||||
|
this.tipo = tipo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TipoPeixe getTipo() {
|
||||||
|
return tipo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTipo(TipoPeixe tipo) {
|
||||||
|
this.tipo = tipo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Peixe [tipo=" + tipo + "; " + super.toString() + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,81 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Prato {
|
||||||
|
|
||||||
|
private final String nome;
|
||||||
|
private final List<Alimento> listaAlimentos;
|
||||||
|
private final int contagemIngredientes;
|
||||||
|
|
||||||
|
private final double preco;
|
||||||
|
|
||||||
|
public Prato(String nome, double preco) {
|
||||||
|
this.nome = nome;
|
||||||
|
this.preco = preco;
|
||||||
|
listaAlimentos = new ArrayList<>();
|
||||||
|
contagemIngredientes = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNome() {
|
||||||
|
return nome;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Prato [nome=" + nome + "," + contagemIngredientes + " ingredientes, preco " + preco + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean adicionarIngrediente(Alimento alimento) {
|
||||||
|
listaAlimentos.add(alimento);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String alimentosInfo() {
|
||||||
|
String msg = "";
|
||||||
|
|
||||||
|
for (Alimento alimento : listaAlimentos) {
|
||||||
|
msg = msg.concat(alimento.toString());
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public double totalPeso() {
|
||||||
|
double p = 0;
|
||||||
|
for (Alimento alimento : listaAlimentos) {
|
||||||
|
p = p + alimento.getPeso();
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public double totalCalorias() {
|
||||||
|
Double parcial;
|
||||||
|
double calorias = 0.0;
|
||||||
|
|
||||||
|
for (Alimento alim : listaAlimentos) {
|
||||||
|
parcial = alim.getCalorias();
|
||||||
|
calorias = calorias + parcial;
|
||||||
|
}
|
||||||
|
return calorias;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public double totalProteinas() {
|
||||||
|
double parcial;
|
||||||
|
double proteinas = 0;
|
||||||
|
for (Alimento alim : listaAlimentos) {
|
||||||
|
parcial = alim.getCalorias();
|
||||||
|
proteinas = proteinas + parcial;
|
||||||
|
}
|
||||||
|
return proteinas;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getPreco() {
|
||||||
|
return this.preco;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
public class PratoDieta extends Prato {
|
||||||
|
private final double limiteCalorias;
|
||||||
|
|
||||||
|
public PratoDieta(String nome, double preco, double limiteCalorias) {
|
||||||
|
super(nome, preco);
|
||||||
|
this.limiteCalorias = limiteCalorias;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean adicionarIngrediente(Alimento alim) {
|
||||||
|
if (totalCalorias() + alim.getCalorias() <= limiteCalorias)
|
||||||
|
return super.adicionarIngrediente(alim);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
public class PratoOvolactovegetariano extends Prato {
|
||||||
|
|
||||||
|
public PratoOvolactovegetariano(String nomePrato, double preco) {
|
||||||
|
super(nomePrato, preco);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean adicionarIngrediente(Alimento a) {
|
||||||
|
if (a instanceof Cereal || a instanceof Legume || a instanceof OvoLacto)
|
||||||
|
return super.adicionarIngrediente(a);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
public class PratoVegetariano extends Prato {
|
||||||
|
|
||||||
|
public PratoVegetariano(String nome, double preco) {
|
||||||
|
super(nome, preco);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean adicionarIngrediente(Alimento a) {
|
||||||
|
if (a instanceof Cereal || a instanceof Legume)
|
||||||
|
return super.adicionarIngrediente(a);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
public enum TipoPeixe {
|
||||||
|
CONGELADO,
|
||||||
|
FRESCO
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
package ementas;
|
||||||
|
|
||||||
|
public enum VariedadeCarne {
|
||||||
|
VACA,
|
||||||
|
PORCO,
|
||||||
|
PERU,
|
||||||
|
FRANGO,
|
||||||
|
OUTRA
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
# Ex 3.1
|
||||||
|
|
||||||
|
a) V
|
||||||
|
b) V
|
||||||
|
c) F
|
||||||
|
d) F
|
||||||
|
e) F
|
||||||
|
f) F
|
||||||
|
g) F
|
||||||
|
h) V
|
Binary file not shown.
After Width: | Height: | Size: 240 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,10 @@
|
||||||
|
= Aula 04
|
||||||
|
|
||||||
|
== Ex 4.1
|
||||||
|
|
||||||
|
A intereção começa com o utilizador clica em efetuar o pagamento com o ApplePay. Depois disto, a aplicação IOS faz um pedido de pagamento ao _PassKit View Controller_. Esta entidade pede a aprovação de pagamento bem como os endereços de faturação e entrega ao utilizador e aguarda a confirmação de autorização.
|
||||||
|
|
||||||
|
O _PassKit View Controller_ procede então ao processamento da informação do pagamento e ao envio do _Apple Token_ para o Servidor da Apple. Ao receber o token, o servidor encripta-o com o ID de comerciante e envia-o para a aplicação IOS, passando pelo _PassKit View Controller_.
|
||||||
|
|
||||||
|
Ao receber o token encriptado, a aplicação IOS envia-o para o serviço de pagamento do comerciante. Este serviço processa o pedido e desencripta o token. De seguida, efetua o pedido de pagamento à _Gateway de Pagamento_ e aguarda a resposta. Ao receber a resposta, o serviço processa a resposta e envia-a para a aplicação IOS, terminando a interação.
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,770 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%ÿÿÿÿ
|
||||||
|
1 0 obj
|
||||||
|
<< /Title (Aula 04)
|
||||||
|
/Creator (Asciidoctor PDF 2.3.14, based on Prawn 2.4.0)
|
||||||
|
/Producer (Asciidoctor PDF 2.3.14, based on Prawn 2.4.0)
|
||||||
|
/ModDate (D:20240311152503+00'00')
|
||||||
|
/CreationDate (D:20240311152804+00'00')
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<< /Type /Catalog
|
||||||
|
/Pages 3 0 R
|
||||||
|
/Names 10 0 R
|
||||||
|
/Outlines 14 0 R
|
||||||
|
/PageLabels 17 0 R
|
||||||
|
/PageMode /UseOutlines
|
||||||
|
/OpenAction [7 0 R /FitH 841.89]
|
||||||
|
/ViewerPreferences << /DisplayDocTitle true
|
||||||
|
>>
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<< /Type /Pages
|
||||||
|
/Count 1
|
||||||
|
/Kids [7 0 R]
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<< /Length 2
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<< /Type /Page
|
||||||
|
/Parent 3 0 R
|
||||||
|
/MediaBox [0 0 595.28 841.89]
|
||||||
|
/CropBox [0 0 595.28 841.89]
|
||||||
|
/BleedBox [0 0 595.28 841.89]
|
||||||
|
/TrimBox [0 0 595.28 841.89]
|
||||||
|
/ArtBox [0 0 595.28 841.89]
|
||||||
|
/Contents 4 0 R
|
||||||
|
/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
|
||||||
|
>>
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<< /Length 5174
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
q
|
||||||
|
/DeviceRGB cs
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
/DeviceRGB CS
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
BT
|
||||||
|
247.33926 777.054 Td
|
||||||
|
/F2.0 27 Tf
|
||||||
|
[<41> 20.01953 <756c61203034>] TJ
|
||||||
|
ET
|
||||||
|
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 730.074 Td
|
||||||
|
/F2.0 22 Tf
|
||||||
|
<457820342e31> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
0.46504 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 700.886 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
[<4120696e746572658d8b6f20636f6d658d6120636f6d206f207574696c697a61646f7220636c69636120656d2065666574756172206f20706167616d656e746f20636f6d206f204170706c655061> 20.01953 <79> 89.84375 <2e204465706f697320646973746f2c2061>] TJ
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
3.00057 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 685.106 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
<61706c6963618d8b6f20494f532066617a20756d2070656469646f20646520706167616d656e746f20616f20> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
3.00057 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
304.48357 685.106 Td
|
||||||
|
/F3.0 10.5 Tf
|
||||||
|
<506173734b6974205669657720436f6e74726f6c6c6572> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
3.00057 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
426.82471 685.106 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
<2e204573746120656e74696461646520706564652061> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
0.59975 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 669.326 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
[<6170726f76618d8b6f20646520706167616d656e746f2062656d20636f6d6f206f7320656e646572658d6f73206465206661747572> 20.01953 <618d8b6f206520656e747265676120616f207574696c697a61646f72206520616775617264612061>] TJ
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 653.546 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
<636f6e6669726d618d8b6f206465206175746f72697a618d8b6f2e> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
0.13782 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 625.766 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
<4f20> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
0.13782 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
58.88832 625.766 Td
|
||||||
|
/F3.0 10.5 Tf
|
||||||
|
<506173734b6974205669657720436f6e74726f6c6c6572> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
0.13782 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
175.50396 625.766 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
<2070726f6365646520656e748b6f20616f2070726f63657373616d656e746f20646120696e666f726d618d8b6f20646f20706167616d656e746f206520616f20656e76696f> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
1.40678 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 609.986 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
<646f20> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
1.40678 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
64.86128 609.986 Td
|
||||||
|
/F3.0 10.5 Tf
|
||||||
|
[<4170706c652054> 29.78516 <6f6b> 20.01953 <656e>] TJ
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
1.40678 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
126.23561 609.986 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
[<20706172> 20.01953 <61206f205365727669646f72206461204170706c652e2041> 20.01953 <6f2072656365626572206f20746f6b> 20.01953 <656e2c206f207365727669646f7220656e6372697074612d6f20636f6d206f204944206465>] TJ
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 594.206 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
[<636f6d65726369616e7465206520656e7669612d6f20706172> 20.01953 <6120612061706c6963618d8b6f20494f532c2070617373616e646f2070656c6f20>] TJ
|
||||||
|
ET
|
||||||
|
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
BT
|
||||||
|
341.89329 594.206 Td
|
||||||
|
/F3.0 10.5 Tf
|
||||||
|
<506173734b6974205669657720436f6e74726f6c6c6572> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
BT
|
||||||
|
458.23329 594.206 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
<2e> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
4.65062 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 566.426 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
[<41> 20.01953 <6f2072656365626572206f20746f6b> 20.01953 <656e20656e637269707461646f2c20612061706c6963618d8b6f20494f5320656e7669612d6f20706172> 20.01953 <61206f2073657276698d6f20646520706167616d656e746f20646f>] TJ
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
0.90495 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 550.646 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
[<636f6d65726369616e74652e20457374652073657276698d6f2070726f6365737361206f2070656469646f206520646573656e637269707461206f20746f6b> 20.01953 <656e2e20446520736567756964612c20656665747561206f2070656469646f206465>] TJ
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
0.10206 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 534.866 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
<706167616d656e746f208820> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
0.10206 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
115.72812 534.866 Td
|
||||||
|
/F3.0 10.5 Tf
|
||||||
|
[<476174657761> 20.01953 <7920646520506167616d656e746f>] TJ
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
0.10206 Tw
|
||||||
|
|
||||||
|
BT
|
||||||
|
230.48704 534.866 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
[<20652061677561726461206120726573706f7374612e2041> 20.01953 <6f2072656365626572206120726573706f7374612c206f2073657276698d6f2070726f6365737361>] TJ
|
||||||
|
ET
|
||||||
|
|
||||||
|
|
||||||
|
0.0 Tw
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
BT
|
||||||
|
48.24 519.086 Td
|
||||||
|
/F1.0 10.5 Tf
|
||||||
|
[<6120726573706f737461206520656e7669612d6120706172> 20.01953 <6120612061706c6963618d8b6f20494f532c207465726d696e616e646f206120696e746572> 20.01953 <618d8b6f2e>] TJ
|
||||||
|
ET
|
||||||
|
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
q
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
1 w
|
||||||
|
0 J
|
||||||
|
0 j
|
||||||
|
[] 0 d
|
||||||
|
/Stamp1 Do
|
||||||
|
0.2 0.2 0.2 scn
|
||||||
|
0.2 0.2 0.2 SCN
|
||||||
|
|
||||||
|
BT
|
||||||
|
541.009 14.263 Td
|
||||||
|
/F1.0 9 Tf
|
||||||
|
<31> Tj
|
||||||
|
ET
|
||||||
|
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<< /Type /Page
|
||||||
|
/Parent 3 0 R
|
||||||
|
/MediaBox [0 0 595.28 841.89]
|
||||||
|
/CropBox [0 0 595.28 841.89]
|
||||||
|
/BleedBox [0 0 595.28 841.89]
|
||||||
|
/TrimBox [0 0 595.28 841.89]
|
||||||
|
/ArtBox [0 0 595.28 841.89]
|
||||||
|
/Contents 6 0 R
|
||||||
|
/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
|
||||||
|
/Font << /F2.0 8 0 R
|
||||||
|
/F1.0 12 0 R
|
||||||
|
/F3.0 13 0 R
|
||||||
|
>>
|
||||||
|
/XObject << /Stamp1 19 0 R
|
||||||
|
>>
|
||||||
|
>>
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<< /Type /Font
|
||||||
|
/BaseFont /c69e49+NotoSerif-Bold
|
||||||
|
/Subtype /TrueType
|
||||||
|
/FontDescriptor 22 0 R
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
/Widths 24 0 R
|
||||||
|
/ToUnicode 23 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
[7 0 R /XYZ 0 758.37 null]
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<< /Type /Names
|
||||||
|
/Dests 11 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<< /Names [(__anchor-top) 18 0 R (_ex_4_1) 9 0 R]
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<< /Type /Font
|
||||||
|
/BaseFont /521ac8+NotoSerif
|
||||||
|
/Subtype /TrueType
|
||||||
|
/FontDescriptor 26 0 R
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
/Widths 28 0 R
|
||||||
|
/ToUnicode 27 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<< /Type /Font
|
||||||
|
/BaseFont /a201a1+NotoSerif-Italic
|
||||||
|
/Subtype /TrueType
|
||||||
|
/FontDescriptor 30 0 R
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
/Widths 32 0 R
|
||||||
|
/ToUnicode 31 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<< /Type /Outlines
|
||||||
|
/Count 2
|
||||||
|
/First 15 0 R
|
||||||
|
/Last 16 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<< /Title <feff00410075006c0061002000300034>
|
||||||
|
/Parent 14 0 R
|
||||||
|
/Count 0
|
||||||
|
/Next 16 0 R
|
||||||
|
/Dest [7 0 R /XYZ 0 841.89 null]
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<< /Title <feff0045007800200034002e0031>
|
||||||
|
/Parent 14 0 R
|
||||||
|
/Count 0
|
||||||
|
/Prev 15 0 R
|
||||||
|
/Dest [7 0 R /XYZ 0 758.37 null]
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<< /Nums [0 << /P (1)
|
||||||
|
>>]
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
[7 0 R /XYZ 0 841.89 null]
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<< /Type /XObject
|
||||||
|
/Subtype /Form
|
||||||
|
/BBox [0 0 595.28 841.89]
|
||||||
|
/Length 165
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
q
|
||||||
|
/DeviceRGB cs
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
/DeviceRGB CS
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
1 w
|
||||||
|
0 J
|
||||||
|
0 j
|
||||||
|
[] 0 d
|
||||||
|
q
|
||||||
|
/DeviceRGB CS
|
||||||
|
0.86667 0.86667 0.86667 SCN
|
||||||
|
0.25 w
|
||||||
|
48.24 30.0 m
|
||||||
|
547.04 30.0 l
|
||||||
|
S
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<< /Type /XObject
|
||||||
|
/Subtype /Form
|
||||||
|
/BBox [0 0 595.28 841.89]
|
||||||
|
/Length 165
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
q
|
||||||
|
/DeviceRGB cs
|
||||||
|
0.0 0.0 0.0 scn
|
||||||
|
/DeviceRGB CS
|
||||||
|
0.0 0.0 0.0 SCN
|
||||||
|
1 w
|
||||||
|
0 J
|
||||||
|
0 j
|
||||||
|
[] 0 d
|
||||||
|
q
|
||||||
|
/DeviceRGB CS
|
||||||
|
0.86667 0.86667 0.86667 SCN
|
||||||
|
0.25 w
|
||||||
|
48.24 30.0 m
|
||||||
|
547.04 30.0 l
|
||||||
|
S
|
||||||
|
Q
|
||||||
|
Q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<< /Length1 7840
|
||||||
|
/Length 4650
|
||||||
|
/Filter [/FlateDecode]
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
xœ½8mp[Uv羧/Ä’¿?”XW~ñ¶$Û²ÛqlÙ–;¶cIŽ2 Ù’m<E28099>e IN»i¼mYX‘<58>´Ù0Sh<53>ÎlY–mË3M“Ðî@è0Ðv‡
;<3B>ýÑnYضЙÝ0aÚÂ0[=÷êÙ‰³aw»³Ó÷tï=ßçÜsÎ}z |