A7N CHIP



[=][=][=] [=][=][=] [=][=][=] [=] [=] [=][=][=] [=][=][=]
[=] [=] [=] [=] [=] [=] [=] [=] [=] [=] [=]
[=] [=] [=] [=] [=] [=] [=] [=] [=] [=]
[=][=][=] [=][=][=] [=][=][=] [=] [=] [=][=][=] [=] [=]
[=] [=] [=] [=] [=] [=] [=] [=] [=] [=]
[=] [=] [=] [=] [=] [=] [=] [=] [=] [=] [=]
[=] [=] [=][=][=] [=] [=][=][=] [=] [=] [=] [=]


[=][=][=] [=][=][=] [=][=][=]
[=] [=] [=] [=] [=]
[=] [=] [=] [=] [=]
[=][=] [=][=][=] [=] [=]
[=] [=] [=] [=] [=]
[=] [=] [=] [=] [=]
[=] [=] [=] [=][=][=]
[=]
[=][=]

TELEKARTY

==========================================================================
|| Wszystko co tu znajdziecie mozecie wykorzystywac jak wam sie podoba. ||
|| Nie interesuje mnie zupelnie czy powstana przez to jakies (czyjes) ||
|| szkody czy nie. Chce zerwac z maniera wrzucania takich tekstow na ||
|| poczatku faqow, bo uwazam to za smieszne. W takich przypadkach traca ||
|| zwykle monopolisci i/lub lameria wiec po co sie o nich martwic? A o ||
|| siebie sie nie bojcie jak maja was zlapac to i tak zlapia, zeby nie ||
|| wiem co - a i tak nikogo jeszcze za teksty nie wsadzili (no w koncu ||
|| jest demokracja) ;) Moja dywiza to: Im wiekszy dym tym ciekawiej ;-) ||
==========================================================================



1. Wstep do faqu

2. Szczegoly techniczne

Czesc A. Wszystko co trzeba wiedziec o telekartach (podstawy)

Sekcja I. Karty Gemplus, Solaic, Schlumberger, Oberthur (francuskie)
a) wprowadzenie
b) schemat chipu
c) opis stykow zlacza
d) podstawowe paramtery
e) diagramy czasowe (timingi)
f) mapa pamieci kart z Francji i Monako
g) mapa pamieci kart z innych krajow

Sekcja II. Karty ODS, Giesecke & Devrient, ORGA Karten systeme, Uniqua,
Gemplus, Schlumberger i Oldenbourg Kartensysteme
a) wprowadzenie
b) styki
c) podstawowe paramtery
d) diagramy czasowe (timingi)
e) mapa pamieci
f) parametry elektryczne

Sekcja III. Schemat czytnikow
a) czytnik 1
b) czytnik 2

Czesc B. Jak zrobic wlasna telekarte?

Sekcja I. Teoria
a) szczegoly i podstawowy program
- telecard.asm
- picreg.equ
b) system zabezpieczen
c) niezbedne czesci
d) jak to budowac

Sekcja II. Niezbedny software
a) czesc UUEnecode
- plik UUEncode
b) standardowy program do odczytu karty na PC

3. Linki zwiazane z tematem i "bibiografia"

4. Na koniec (podziekowania, etc...)


[ 1. Wstep do faqu ]
==================

Jak widzicie to moj pierwszy faq. Nie mam zamiary pisac rzeczach typu:
jak podpiac sie do sasiada, jak znukowac lamera czy jak zdobyc haslo
roota. Zajmuje sie tu KARTAMI CHIPOWYMI, zwanymi z angielska telecard,
phonecard lub (najrzadziej) chipcard. Wiem ze dla nas to temat nowy i
raczej malo przydatny bo TPSA nie kwapi sie z wprowadzeniem automatow
na takie karty. Poki co mamy i pewnie dlugo miec bedziemy Urmety na
karty magnetyczne Telefonica. Mimo to zdecydowalem sie napisac o tym
faq poniewaz czesto bywam za granica i tam te wiadomosci sie moga
przydac. Poza tym nigdy nic nie wiadomo i moze pewnego dnia TPSA
uszczesliwi nas automatami na karty chipowe. Dodatkowo warto wiedziec,
ze schemat takich kart jest uniwersalny (zgodnie z normami ISO) i nie sa
one wykorzystywane tylko do telefonow, ale takze do odkodowywania
programow TV, jako karty identyfikacyjne, itp. Oczywiscie, wiadomo ze
sam temat kart chipowych (tak jak kart magnetycznych) to rzeka i mozna
by o tym napisac 1 GB tekstu (sama dokumentacja to kilkanascie tysiecy
stron). Poniewaz jest to niemozliwe, omowie tu podstawowe rzeczy, ktore
trzeba widziec zajmujac sie ta tematyka. W rodziale "Linki" podalem
kilkanascie IMO najlepszych adresow URL z informacjami na ten temat dla
dociekliwych. A tak na koniec wstepu: sorry ze ten faq jest troche
"sztywny" ale denerwuje mnie wypisywanie glupot bez zadnej tresci, jak
to coraz czesciej widze w roznych faqach. Z gory przepraszam, jesli
jakies informacje nie sa 100% aktualne. Stan, ktory opisuje dotyczyl
przelomu lat 1997/1998 ale w czerwcu 1998 na pewno wszystko jeszcze
dzialalo. Dzis moze sie okazac, ze sa niezbedne pewne korekty, ale
jestem na 100% pewien, ze generalne zalorzenia sa takie jak byly.

[ 2. Szczegoly techniczne ]
=======================

*************
* U W A G A *
*************

Ponizej znajduje sie szereg schematow. Oznaczenia niektorych elementow
sa miedzynarodowe (w jezyku angielskim), dlatego podaje tu do nich
"slownik". Nie zdecydowalem sie na przetlumaczenie ich na jezyk polski
w celu praktycznym. Latwiej na tej podstawie znalezc wszelkie informacje
w Internecie, dotyczace wlasnie tych wybranych elementow.

Address - adres
Clk - (Clock) sygnal zegarowy (zegar)
Data - Dane
Gnd - (Ground) masa
R/W - (Read/Write) zapis/odczyt
Fuse - bezpiecznik
I/O - (Input/Output) Wejscie/Wyjscie
xMOS - (Metal Oxide Semiconductor) - polprzewodnik w technologii
metalowo tlenkowej.
PCB - (printed circuit board) plytka drukowana
Reset - zerowanie systemu (lub reset ;) )
Vpp - napiecie programujace
Vcc - napiecie zasilania

Mnznnz - Mam nadzieje, ze nic nie zapomnialem

+----------------------------------------------------------------------+
| CZESC A. Wszystko co trzeba wiedziec o telekartach (podstawy) |
+----------------------------------------------------------------------+

Sekcja I. Karty Gemplus, Solaic, Schlumberger, Oberthur (francuskie):
------------------------------------------------------------------------

a) wprowadzenie

W polowie lat 80-tych pojawily sie karty nowej generacji (zwane kartami
sprytnymi - "smart-cards" lub kartami chipowymi - "chip cards"). Karty
te zastapily wiekszosc kart magnetycznych uzywanych w znacznej mierze
przez firmy telekomunikacyjne a takze korporacje zajmujace sie kartami
kredytowymi od strony produkcyjnej. Karty chipowe sa w wiele skuteczniej
zabezpieczone niz tradycyjne karty magnetyczne. Jest kilka typow takich
kart chipowych majacych rozne zastosowanie. Najprostsze to karty typu
"Prosta Pamiec". One sa wlasnie najczesciej uzywane jako karty do
dzwonienia z automatow publicznych. Ogolnie mozna powiedziec, ze cala
zawartosc pamieci jest przeznaczona do odczytu w tych kartach. Dodatkowo
jest tam specjalna czesc, ktora jest nie niezapisywalna a wiec nie moze
byc takze w zaden sposob kasowana przez czytnik.
Poza tym sa bardziej skomplikowana karty, np. "Karta z Pamiecia" (lepszy
rodzaj karty "Prosta Pamiec") posiada specjalny obszar z roznymi danymi
zabezpieczony szyfrowanym kluczem. Takie karty moga zawierac jakies
prywatne informacje w tej zabezpieczonej czesci.
I wreszcie na koncu, sa tzw. "Karty z Mikroprocesorem" (pracujace na
podstawie protokolu ISO-7816). Te karty sa najbezpieczniejsze poniewaz
posiadaja wlasny sytem operacyjny, ktory zabezpiecza wszelkie operacje
wejscia/wyjscia (I/O), o ile wczesniej nie zostal wprowadzony specjalny
kod PIN. Najczesciej uzywa sie tych kart kiedy niezbedna jest poufnosc
danych: karty bankowe, karty kodowe platnych telewizji (Canal+), karty
zdrowia (na Zachodzie Europy a podobno i u nas niedlugo po reformie ;)).

Co do kart chipowych uzywanych do dzwonienia (zwanych dalej telekartami)
to nawet gdy naleza one do tych slabiej zabezpieczonych (a tak jest w
rzeczywistosci), bardzo trudno jest dzwonic za darmo przy ich pomocy. W
rzeczy samej nie da sie, ale sa przeciez sposoby ominiecia wszelkich
trudnosci technicznych, prawda? Wracajac do telekart to wszystkie dane
sa czytelne bez zadnych ograniczen, poniewaz nie ma wewnatrz zadnych
poufnych informacji. Jednak sa na tyle dobrze zrobione, ze zabezpieczaja
interesy firm telekomunikacyjnych (za granica tez sa wielkie i pazerne
twory TPSA-podobne).
A wiec czym sa dokladnie telekarty? W rzeczywistosci sa to: 256 bitowy
EPROM (karty francuskie) lub 128 bitowy EEPROM (karty niemieckie) z
szeregowym wyjsciem i kilkoma innymi kontrolnymi stykami. Karty innych
panstw to tylko powielenie technologii francuskiej lub niemieckiej (ale
dotyczy to tylko Europy w USA jest troche inaczej). Oczywiscie kazdy
kraj ma wlasna specyfike, ale roznice sa w bitach - bedzie o tym duzo w
czesci ze schematami.
Powstaje pytanie: dlaczego nie mozna (teoretycznie) telekarty "napelnic"
(uzupelnic) po raz drugi (i kolejny)? Otoz zeby uzupelnic po raz drugi
telekarte trzeba by skasowac zapis przy pomocy promieni UV (ultra
fioletowych). Mozna tego dokonac jedynie na EPROMie a nie dziala to na
EEPROMie (taka jest jego specyfika elektroniczna). Karty sa pokryte, w
technologii UV, nieprzezroczysta zywica a to powoduje, ze UV nie moze
dotrzec do krzemowego chipu. A wiec nastepna przeszkoda po EEPROMie. Ale
nawet gdyby byl to EPROM i jakby sie udalo zamazac chip trzeba by teraz
zaprogramowac tzw. przetworczy obszar karty a wiec wyrugowac bezpiecznik
bedacy specjalnie ustawiony po zaprogramowaniu karty w fabryce, tak aby
uniemozliwial zapis. Krotko mowiac ta czesc karty jest zabezpieczona
przed zapisem i aby to zmienic trzeba by dysponowac takim sprzetem oraz
technologia jak w fabryce robiacej te karty.
Pomimo tego, warto dokladnie poznac jak te karty dzialaja, zeby zobaczyc
jakie rodzaje danych sa wewnatrz i w jaki sposob dane te sa mapowane. Z
drugiej strony BEZ DOKLADNEGO POZNANIA BUDOWY TYCH KART nie da sie nic
pozniej zrobic w zwiazku z ich "samodzielnym tworzeniem" ;). W tym celu
trzeba wreszcie zobaczyc ile modulow (jednostek) jest pozostawianych po
wydzwonieniu. Poza tym karty te maja bardzo duzo innych zastosowan, poza
dzwonieniem, np. kiedy mozna ich uzyc jako klucz do otwarcia drzwi lub
jako klucz do zabezpieczenia programu (na podstawie ich kodowania). Oba
przypadki sa jak najbardziej prawdziwe, ale nie bede sie tu nimi
zajmowal (to raczej drugorzedna rzecz) ;).
Jesli idzie o historie i ciaglosc technologiczna to telekarty francuskie
zostaly stworzone w 1984. Konstruktorzy zdecydowali sie robic je w
technologii NMOS, ale teraz uzywaja juz technologii CMOS (od okolo roku
1994 chociaz zdarzaja sie jeszcze w tej poprzedniej wersji). Czytniki w
automatach publicznych zostaly juz niemal wszystkie zastapione na CMOS,
poza jednostkowymi przypadkami. Jednoczesnie uzywa sie EEPROMu zarowno
do zabezpieczania kart jak i dodania do nich wielu uzytecznych (z punktu
widzenia klienta i producenta), informacji. To nazywa sie "Telekarty
drugiej generacji", chociaz moim zdaniem duzo tu halasu (dumna nazwa) a
zmian niewiele. Poza lepszym zabezpieczeniem, tzw. "obszarem producenta"
i zmiana wygladu nie ma tam nic wiecej.

b) schemat chipu

.-------------------.
| |
--|> Clk |
| _ |
--| R/W |
| |
--| Reset |
| |
--| Fuse |
| |
--| Vpp |
| |
| |
'-. .-'
| |
.-------------------.
| Out |-- wyjscie szeregowe
'-------------------'


c) opis stykow zlacza

AFNOR CHIP ISO CHIP
---------- --------
-------------+------------- -------------+-------------
| 8 | 4 | | 1 | 5 |
| | | | | |
+-------\ | /-------+ +-------\ | /-------+
| 7 +----+----+ 3 | | 2 +----+ + 6 |
| | | | | | | |
+--------| |--------+ +--------| |--------+
| 6 | | 2 | | 3 | | 7 |
| + +----+ | | +----+----+ |
+-------/ | \-------+ +-------/ | \-------+
| 5 | 1 | | 4 | 8 |
| | | | | |
-------------+------------- -------------+-------------

NB: tylko pozycja chipu jest
ustandaryzowana wedlug ISO. Nie
dotyczy to jednak stykow.

Styki: 1 : Vcc = 5V 5 : Gnd
----- 2 : R/W 6 : Vpp = 21V
3 : Clock 7 : I/O
4 : Reset 8 : Fuse

d) podstawowe paramtery

- Protokol Synchroniczny.
- Technologia N-MOS.
- Organizacja wedlug schematu 256x1 bit .
- 96 zapisan zabezpieczonych przez wyrzucenie bezpiecznika.
- Niska moc 85mW w trybie odczytu.
- 21 V programujacego napiecia.
- Czas dostepu: 500ns
- Zakres temperatury: -10C + 70C
- 10 lat przetrzymania danych.

e) diagramy czasowe (timingi)

+21V _____________
+5V ____________________________________| |_______________ Vpp
: :
+5V ___________________:_____________:_______________ Reset
0V ________________| : :
: : :
+5V ____ : ____ : ______:______
0V ___| |_______:_____| |________:______| : |________ Clock
: : : : : : : : :
+5V : : : : : :______:______: : _
0V ___:____:_______:_____:____:________| : |______:________ R/W
: : : : : : : : :
+5V : : :_____: :________: : : :________
0V XXXXXXXXXXXXXXXXX_____XXXXXX________XXXXXXXXXXXXXXXXXXXXXX________ Out
: : : : : :<-----><---->: :
: : : : : :10 to 10 to :
: : : : : :50 ms 50ms :
Reset Bit 1 Bit2 Bit 3
karty odczyt odczyt Bit2 zapisywany do 1 odczyt


f) mapa pamieci kart z Francji i Monako

Bajty Bity Binarnie Szesnastkowo
+-----------+-----+
1 1 --> 8 | | | ---> kod konstrukcyjny
+-----------+-----+
2 9 --> 16 | 0000 0011 | $03 | ---> telekarta francuska
+-----------+-----+
3 17 --> 24 | | |
+-----------+-----+
4 25 --> 32 | | |
+-----------+-----+
5 33 --> 40 | | |
+-----------+-----+
6 41 --> 48 | | |
+-----------+-----+
7 49 --> 56 | | |
+-----------+-----+
8 57 --> 64 | | |
+-----------+-----+
9 65 --> 72 | | |
+-----------+-----+
10 73 --> 80 | | |
+-----------+-----+
11 81 --> 88 | | |
+-----------+-----+
12 33 --> 40 | 0001 0011 | $13 | ---> 120 jednostkowa karta
| 0000 0110 | $06 | ---> 50 jednostkowa karta
| 0000 0101 | $05 | ---> 40 jednostkowa karta
+-----------+-----+
13-31 97 --> 248 | | | ---> Obszar jednostek: za kazdym
| | | razem gdy jednostka jest
| | | uzywana, bit ustawia sie na
| | | wartosc "1";
| | | Ogolnie, pierwsze 10
| | | jednostek jest spalanych w
| | | fabryce na probe.
+-----------+-----+
32 249 --> 256 | 1111 1111 | $FF | ---> karta jest pusta
+-----------+-----+

g) mapa pamieci kart z innych krajow

Bajty Bity Binarnie Szesnastkowo
+-----------+-----+
1 1 --> 8 | | |
+-----------+-----+
2 9 --> 16 | 1000 0011 | $83 | ---> telekarta
+-----------+-----+-----------+-----+
3-4 17 --> 32 | 1000 0000 | $80 | 0001 0010 | $12 | ---> 10 jednostkowa karta
| | | 0010 0100 | $24 | ---> 22 jednostkowa karta
| | | 0010 0111 | $27 | ---> 25 jednostkowa karta
| | | 0011 0010 | $32 | ---> 30 jednostkowa karta
| | | 0101 0010 | $52 | ---> 50 jednostkowa karta
| | | 0110 0010 | $62 | ---> 60 jednostkowa karta
| | | 1000 0010 | $82 | ---> 80 jednostkowa karta
| 1000 0001 | $81 | 0000 0010 | $02 | ---> 100 jednostkowa karta
| | | 0010 0010 | $22 | ---> 120 jednostkowa karta
| | | 0101 0010 | $52 | ---> 150 jednostkowa karta
+-----------+-----+-----------+-----+
5 33 --> 40 | | | ---> $00 dla Szwecji.
+-----------+-----+
6 41 --> 48 | | |
+-----------+-----+
7 49 --> 56 | | |
+-----------+-----+
8 57 --> 64 | | |
+-----------+-----+
9 65 --> 72 | | |
+-----------+-----+
10 73 --> 80 | | |
+-----------+-----+
11 81 --> 88 | | | ---> $11 dla Szwecji
+-----------+-----+
12 89 --> 96 | 0001 1110 | $1E | ---> Szwecja
| 0010 0010 | $22 | ---> Hiszpania
| 0011 0000 | $30 | ---> Norwegia
| 0011 0011 | $33 | ---> Andora
| 0011 1100 | $3C | ---> Irlandia
| 0100 0111 | $47 | ---> Portugalia
| 0101 0101 | $55 | ---> Czechy
| 0101 1111 | $5F | ---> Gabon
| 0110 0101 | $65 | ---> Finlandia
+-----------+-----+
13-31 97 --> 248 | | | ---> Obszar jednostek: za
| | | kazdym razem gdy jednostka
| | | jest uzywana, bit ustawiany
| | | jest na "1";
| | | Ogolnie pierwsze 10
| | | jednostek jest spalanych w
| | | fabryce na probe.
+-----------+-----+
32 249 --> 256 | 0000 0000 | $00 |
+-----------+-----+


Sekcja II. Karty ODS, Giesecke & Devrient, ORGA Karten systeme, Uniqua,
Gemplus, Schlumberger i Oldenbourg Kartensysteme:
------------------------------------------------------------------------

a) wprowadzenie

Specyfika tych kart to 128 bitowa pamiec w technologii NMOS. Ponizej
mapa pamieci tych kart:

64 bitowy EPROM zapis zabezpieczony (obszar przetworczy).
40 bitowy EEPROM (5x8 bitow).
24 bity ustawione na "1".

b) styki

ISO 7816-2
-------------+-------------
| 1 | 5 | Styki
| | | -----
+-------\ | /-------+
| 2 +----+ + 6 | 1 : Vcc = 5V 5 : Gnd
| | | | 2 : Reset 6 : n.c.
+--------| |--------+ 3 : Clock 7 : I/O
| 3 | | 7 | 4 : n.c. 8 : n.c.
| +----+----+ |
+-------/ | \-------+ n.c. : nie polaczony
| 4 | 8 |
| | |
-------------+-------------

c) podstawowe parametry

- ISO 7816 - kompatybilne w 1/2.
- uzywane pojedyncze (5V) napiecie zasilania.
- zuzycie niskiej mocy.
- technologia NMOS.

d) diagramy czasowe (timingi)

reset
-----

Adres licznika jest resetowany na 0 kiedy zegar, linia CLK, podnosi sie
dopoki linia kontrolna R jest wysoka. Zauwazyc nalezy takze, ze licznik
adresowy nie moze byc zresetowany gdy znajduje sie on w zakresie od
0 do 7.

__________________
_____| |_____________________________________________ Reset
: :
: _____ : _____ _____ _____ _____
_____:_______| |____:_| |_____| |_____| |_____| |_ Clk
: : : : : : : : : : :
_____:_______:__________:_:_____:_____:_____:_____:_____:_____:_____:_
_____:___n___|_____0____:_|_____1_____|_____2_____|_____3_____|___4_:_ (Address)
: : : : : : :
_____:_______ ____:_______:___________:___________:___________:_
_____: |_____| :_______|___________|___________|___________|_ Data
Bit n Bit 0 Bit 1 Bit2 Bit3

Licznik adresowy jest zwiekszany o 1 na kazdym zboczu narastajacym
zegara - sygnal CLK, tak dlugo az linia kontrolna R jest szczatkowo mala
(istotne!!). Dane bedace w kazdym zaadresowanym bicie sa wysylane na I/O
za kazdym taktem zegara. Mozliwe jest tu zmniejszenie licznika adresow a
wiec adresowanie wczesniejszego bitu. Licznik adresowy musi byc jednak
wyzerowany, a pozniej zwiekszony do wymaganej wartosci.

zapis
-----

Wszystkie niezapisane lub zamazane bity w obrebie adresu 64-104, moga
pozostac dalej niezapisane. Kiedy komroka pamieci nie jest zapisywana to
ustawiana jest na 0.
Zaadresowana komorka jest niezapisana az do ponizszej sekwencji:
1 - R podnosi sie dopoki wartosc zegara jest niska. Trwa to az do
wylaczenie licznika adresowego poprzez zwiekszenie go o jeden takt
zegara.
2 - Wartosc zegara jest wtedy podnoszona do minimum 10ms az do zapisania
bitu adresu. Gdy operacja zapisu sie konczy, wartosc zegara spada,
licznik adresowy jest odblokowany a zawartosc zapisanej komorki, ktora
wynosi teraz 0, jest wysylana na I/O, jesli operacja przebiegla
pomyslnie. Nastepny takt zegara zwiekszy adres o jeden, nastepnie
zapisana sekwencja bedzie mogla byc powtorzona do zapisania nastepnego
bitu.
Wiem ze troche to skaplikowane (lub nawet bardzo ;) ), takze dla osob
znajacych elektronike, ale schematy wyjasniaja to lepiej niz moj opis ;)
Mam nadzieje, ze sobie poradzicie z tym.

_____ _____
_____________| |______________________________| |_______________ Reset
: :
___ : _____ ___ : _____
____| |____:__________| |_________| |_____:__________| |____ Clk
: : : : : : : : :
____:________:__________:_____:_________:___:_____:__________:_____:_____
n | n+1 | n+2 | : n+3 | : (Address)
----'--------:----------'-----:---------'---:-----:----------'-----:-----
: : : : : : :
________ ____:_____ __________:_____________:_____:_____ __________:____
________|____| |__________|_____________|_____| |__________|____ I/O
n n+1 : : n+1 n+2 : :
: : : :
zapis zapis

Nosnik Zapisu
-------------

Licznik jest zamazywany przez wykonanie sekwencji Nosnika Zapisu. Dzieje
sie to podczas nastepnego, najwazniejszejszego jego dzialania (najwyzszy
priorytet), powodujacego zamazywanie licznika.

Sekwencja Nosnika Zapisu jest nastepujaca:
1 - Licznik adresowy jest ustawiany na niezapisany bit, ktory jest tez
zamazywany, w nastepnym najwazniejszym etapie pracy licznika.
2 - Zwiekszanie jest wylaczone na nastepnym zboczu narastajacym R gdzie
wartosc zegara jest szczatkowo niska.
3 - Wartosc zegara jest wtedy zwiekszana do minimum 10ms, dopoki R jest
male, zeby zapisac nastepny zaadresowany bit.
4 - R podnosi sie znowu dopoki wartosc zegara pozostaje szczatkowo mala,
zeby wylaczyc zwiekszanie po raz drugi.
5 - Wartosci zegara podnosi sie do minimum 1ms, dopoki R jest male, zeby
zapisac zaadresowany bit po raz drugi, wymazujac poziom licznika
bezposrednio ponizej zaadresowanego bitu.

_____ _____
______| |____________________| |_________________________________ Rst
: :
: _______ : _______ ___
______:___________| |______:_____________| |______| |______ Clk
: : : : : : : :
: : : : : : : :
<------------------------- address n ------------------------>:<--- n+1 ------
: : : : : : :
: : : : : : :
______:_____ _____________:______:_____ _______________:__________:______
______| |_____________|______| |_______________|__________|______ I/O
: : n : : n n+1
: : : :
Zapis Kasowanie

e) Mapa pamieci

Bajty Bity Binarnie Szesnastkowo
+-----------+-----+
1 1 --> 8 | | |
+-----------+-----+
2 9 --> 16 | 0010 1111 | $2F | ---> Niemcy
| 0011 0111 | $37 | ---> Holandia
| 0011 1011 | $3B | ---> Grecja
+-----------+-----+
3 17 --> 24 | | |
4 25 --> 32 | | | ---> obszar wydawcy
5 33 --> 40 | | | (zapis niedozwolony)
6 41 --> 48 | | |
7 49 --> 56 | | |
8 57 --> 64 | | |
+-----------+-----+
9 65 --> 72 | | | ---> c4096 )
10 73 --> 80 | | | ---> c512 )
11 81 --> 88 | | | ---> c64 ) * 5 faza licznika
12 89 --> 96 | | | ---> c8 ) osemkowego
13 97 --> 104 | | | ---> c0 )
+-----------+-----+
14 105 --> 112 | 1111 1111 | $FF |
15 113 --> 120 | 1111 1111 | $FF | ---> obszar bitow ustawiony na
16 120 --> 128 | 1111 1111 | $FF | "1"
+-----------+-----+

Obszar wydawcy
--------------

Obszar wydawcy zawiera 40 bitow. Tresc jego jest wyspecyfikowana przez
wydawce karty, i jest ustalona w procesie produkcji. Tresc obszaru
wydawcy bedzie zawierala dane takie jak numery seryjne, daty czy centra
dystrybucyjne. Ten obszar jest przenaczony tylko do odczytu.

Obszar licznika
---------------

Obszar licznika przechowuje jednostki karty. Jego wartosc poczatkowa
jest wyspecyfikowana w obszarze zastrzezonym przez wydawce karty i
ustawiona w procesie produkcji. Obszar licznika jest podzielony na 5 faz
liczydla. Wartosc osemkowa kazdej fazy jest zdefiniowana przez liczbe
bitow ustawionych na "1". Wartosc tej fazy musi byc wielekrotnoscia
wspolczynnika 8^n (gdzie n miesci sie w obrebie [4..0] ).

przyklad: dla karty gdzie pozostalo 15818 jednostek zwyklych (lub
pienieznych).

Bajt9 Bajt10 Bajt11 Bajt12 Bajt13
------------------------------------------------------------------
00000111 - 00111111 - 01111111 - 00000001 - 00000011
------------------------------------------------------------------
(3)osemkowo (6)osemkowo (7)osemkowo (1)osemkowo (2)osemkowo
------------------------------------------------------------------
Wartosc = 3*8^4 + 6*8^3 + 7*8^2 + 1*8^1 + 2*8^
--------------------------------------------------------------
Suma = 15818 jednostek

Zauwazyc nalezy, ze gdy sie zmniejszy licznik to wtedy nie ma on
pozwolenia na zapis wartosci wiekszej niz poprzednia.

f) Parametry elektryczne

maksymalne wartosci
-------------------

+--------+------+------+------+---+
| Symbol | Min | Max |Jednostka |
+----------------------------+--------+------+------+----------+
| napiecie zasilania | Vcc | -0.3 | 6 | V |
+----------------------------+--------+------+------+----------+
| napiecie wejsciowe | Vss | -0.3 | 6 | V |
+----------------------------+--------+------+------+----------+
| temperatura przechowywania | Tstg | -20 | +55 | C |
+----------------------------+--------+------+------+----------+
| moc rozpraszana | Pd | - | 50 | mW |
+----------------------------+--------+------+------+----------+

charakterystyka stalopradowa
----------------------------
+--------+-----+-----+-----+-----------+
| Symbol | Min.| Typ.| Max.| Jednostka |
+------------------------------+--------+-----+-----+-----+-----------+
| prad pobierany | Icc | - | - | 5 | mA |
+------------------------------+--------+-----+-----+-----+-----------+
| napiecie wejsciowe (niskie) | Vl | 0 | - | 0.8 | V |
+------------------------------+--------+-----+-----+-----+-----------+
| napiecie wejsciowe (wysokie) | Vh | 3.5 | - | Vcc | V |
+------------------------------+--------+-----+-----+-----+-----------+
| wartosc wejscia R | Ih | - | - | 100 | uA |
+------------------------------+--------+-----+-----+-----+-----------+
| wartosc wejscia Clk | Il | - | - | 100 | uA |
+------------------------------+--------+-----+-----+-----+-----------+
| wartosc wyjscia (Vol=0.5V) | Iol | - | - | 10 | uA |
+------------------------------+--------+-----+-----+-----+-----------+
| wartosc wyjscia (Voh=5V) | Ioh | - | - | 0.5 | mA |
+------------------------------+--------+-----+-----+-----+-----------+

charakterystyka zmiennopradowa
------------------------------

+--------+------+------+------+
| Symbol | Min. | Max. | Jedn.|
+----------------------+--------+------+------+------+
| szerokosc impulsu | tr | 50 | - | us |
| R adres zerowany | | | | |
+----------------------+--------+------+------+------+
| szerokosc impulsu | ts | 10 | - | us |
| R zapis | | | | |
+----------------------+--------+------+------+------+
| wysoki poziom Clk | th | 8 | - | us |
+----------------------+--------+------+------+------+
| niski poziom Clk | tl | 12 | - | us |
+----------------------+--------+------+------+------+
| strob zapisu | Twrite | 10 | - | ms |
+----------------------+--------+------+------+------+
| strob kasowania | Terase | 10 | - | ms |
+----------------------+--------+------+------+------+
| | tv1 | 5 | - | us |
+----------------------+--------+------+------+------+
| | tv2 | 3.5 | - | us |
+----------------------+--------+------+------+------+
| | tv3 | 3.5 | - | us |
+----------------------+--------+------+------+------+
| | tv4 | 3.5 | - | us |
+----------------------+--------+------+------+------+
| | tv5 | 3.5 | - | us |
+----------------------+--------+------+------+------+
| | tv6 | 5 | - | us |
+----------------------+--------+------+------+------+
| | tv7 | 5 | - | us |
+----------------------+--------+------+------+------+
| | tv8 | 10 | - | us |
+----------------------+--------+------+------+------+

SEKCJA III. Schemat czytnika
----------------------------

a) czytnik 1

Zewnetrznie 5V (Opcjonalnie)
5V o------,
| / T2 PNP d13 r7 10
0V o--, | / BC 177 |\ | _____
| | ,-------o/ o--*------. E C .--| >+-[_____]--------,
__+__ | | | \ / |/ | |
\\\\\ | __|__ Bateria | \ / |
| - 22.5V | --------- |
....... | | | _____ | _____ |
: | __+__ +--[_____]--*--[_____]--, |
D2 : | \\\\\ r6 150k r5 15k | |
4 o-------|---------------------------*------------------|-------------, |
: | | r3 220k / C | |
Ack : | | _____ |/ T1 - NPN | |
10 o------|--------. '--[_____]-*---| BC107 | |
: | | _____ | |\ | |
: ,-, ,-, +--[_____]-' \ E | |
: | |r2 | |r1 | r4 390k | | |
: | |220 | |22k __+__ __+__ | |
: |_| |_| \\\\\ \\\\\ | |
: | |\ | | | |
: *--| >+--|----------------*----------------------------------|--*
: | |/ | | ,-----|-----------------------------, | |
: | d1 | | | ,----------,----------, | | |
: | | | *---|--* Fuse | Reset *--|---' | |
: | | | | |----------|----------| | |
D0 : | | | ,-|---|--* I/O | Clk *--|---, | |
2 o-------|--------|----------' | | |----------|----------| | | |
: | | | '---|--* Vpp | R/W *--|---|----' |
Busy : | | | |----------|----------| | |
11 o------|--------|--------------' ,---|--* Gnd | 5V * | | |
: | | | '----------'-------|--' | |
D1 : | | __+__ Zlacze chipu | | |
3 o-------|--------|--------, \\\\\ | | |
: | | '------------------------------|------' |
Str : | |\ | | | |
1 o-------*--| >+--*----*----*----*----*-------------------' |
: d2|/ | |d3 |d4 |d5 |d6 |d7 |
: -+- -+- -+- -+- -+- |
: /_\ /_\ /_\ /_\ /_\ |
D3 : | | | | | |\ | d8 |
5 o----------------*----|----|----|----|---| >+-------*-------------------'
: | | | | |/ | |
: | | | | |
D4 : | | | | |\ | d9 |
6 o---------------------*----|----|----|---| >+-------*
: | | | |/ | |
: | | | |
D5 : | | | |\ | d10 |
7 o--------------------------*----|----|---| >+-------*
: | | |/ | |
: | | |
D6 : | | |\ | d11 |
8 o-------------------------------*----|---| >+-------*
: | |/ | |
: | |
D7 : | |\ | d12 |
9 o------------------------------------*---| >+-------'
: |/ |
:
:
25 o------.
: |
.......: | d1 do d13: 1N4148
__+__
\\\\\
Port rownolegly

b) czytnik 2

dioda Zenera 3.3V
2x1N4001 ________ 150
|\ | |\ | | | _____ | /| (6)
o----, ,--+ >+--*--+ >+--*---+ 7824 +----*--o o-|_____|-+< +-*----o Vpp
| | |/ | | |/ | | |________| | | \| |
)||( 220F | 220F | | ===== 0.22F _+_
220V )||( 25V | + 40V | + | | / \ 1N4148
)||( ===== ===== __+__ __+__ '-+-'
~ )||( | - | - \\\\\ \\\\\ ,+,
| | ___ | | | | 12
o----' '--o o-* __+__ | |
obecnosc | \\\\\ ________ '+' 12
karty | |\ | | | | _____ (1)
'--+ >+------+ 7805 +------*-------------------*--|_____|-o Vcc
|/ | |________| | |
1N4001 | _+_ |
| \ / ---> ,+,
__+__ -+- ---> | |
\\\\\ | | | 4.7k
,+, '+'
| | | (7)
| | 680 *----------o I/O
'+' |
| Zajete (11) o
| (4)
__+__ D0 (2) o-----*----o Raz
\\\\\ |
4.7nF =====
|
__+__
\\\\\ (3)
D1 (3) o----------o Clk
(2)
D2 (4) o----------o W
Gnd (25) o
| fuse (8)
*--~~~~~---o Fus
__+__
\\\\\

+----------------------------------------------------------------------+
| CZESC B. Jak zrobic wlasna telekarte? |
+----------------------------------------------------------------------+

SEKCJA I. Teoria
----------------

a) szczegoly i podstawowy program

Tak naprawde system stosowany w kartach chipowych mozna dosyc prosto
obejsc, poniewaz wcale nie jest tak dobrze zabezpieczony, jak moglo by
sie wydawac po przeczytaniu CZESCI A. Ponizej przedstawione jest dosyc
specyficzne oprogramowanie dla mikrokomputera jednoukladowego PIC 16C84
RISC, wyprodukowanego przez Microchip. Umozliwia on emulacje kart
Schlumberger i innych. System ten funkcjonuje w Skandynawii (Szwecja,
Norwegia i Finladnia), Hiszpanii, Francji, Monako i w wielu innych
krajach. W przypadku Francji (ewentualnie innych krajow) oprogramowanie
to wymaga sladowych modyfikacji dla poprawnego dzialania, ale jest to
rzecz na poziomie juz banalnym (przy zalozeniu, ze rozumie sie cala
tresc przedstawiona do tej pory). A wiec co do przedstawianego tu tematu
niezbedne jest posiadanie dostepu do programatora (PROMu), mogacego
poradzic sobie z ukladem PIC 16C84. Mozna rowniez zbudowac cos takiego
samemu jak to pokazane jest na dolaczonych schematach ponizej.

Po pierwsze, trzeba wczytac pierwsze 12 bajtow danych z poprawnie
dzialajacej karty z kraju, w ktorym emulator ma dzialac. Warunek ten
jest niezbedny do spelnienia. Ma to byc karta aktualnie funkcjonujaca, a
nie jakas sprzed 10 lat (lub nawet sprzed 2). Nastepnie wystarczy tylko
wprowadzic te 12 bajtow danych we wlasciwe miejsce w ponizszym programie
i to skompilowac. To wszystko ;-) Proste, prawda? Poniewaz zdecydowanie
przypadkowo wybralem wersje ukladu PIC z zewnetrznymi danymi EEPROMu,
oznacza to, ze pierwsze 12 pozycji danych EEPROMu powinno zawierac
identyfikator (ID) karty. Do dzisiaj kod ten powinien (!) dzialac bez
zadnych problemow. Jesli cos jest nie tak w niektorych przypadkach,
wystarczy zmodyfikowac odpowiednio ten program (jesli sie samemu nie
umie poprosic kolege codera ;) ). Poniewaz PIC jest bardzo szybkim i
"mocnym" mikrokomputerem jednoukladowym, moze byc to stosunkowo trudne
dla firm robiacych telekarty rozwiazanie problemu (a dla nas to
oczywiscie lepiej ;) ). Aha i jeszcze jedna sprawa co do oprogramowania:
zauwazyc nalezy, ze biezaca wersja pakietu PICSTART 16B Microchip'u jest
niemozliwa do programowania tablicy danych EEPROMu w ukladzie 16C84,
wiec jesli zamierzacie tego uzywac, uzyjcie innej wersji kodu, ktory
znajdziecie w dodatkach.

- wersja oryginalna (komentarze po angielsku)
========================================================================

TITLE "ISO 7816 Synchronous Memory Card Emulator"
LIST P=PIC16C84, R=HEX
INCLUDE "PICREG.EQU"

; PIC16C84 I/O Pin Assignment List

CRD_CLK equ 0 ; RB0 + RA4 = Card Clock
CRD_DTA equ 0 ; RA0 = Card Data Output
CRD_RST equ 1 ; RB1 = Card Reset, Low-Active
CRD_WE equ 7 ; RB7 = Card Write-Enable, Hi-Active

; PIC16C84 RAM Register Assignments

CRD_ID equ 0x00c ; Smartcard ID, 12 bytes
FUSCNT equ 0x018 ; Fused units counter
BITCNT equ 0x019 ; Bitcounter
LOOPCNT equ 0x01a ; Loop Counter
EE_FLAG equ 0x01b ; EEPROM Write Flag
TEMP1 equ 0x01c ; Temporary Storage #1
TEMP2 equ 0x01d ; Temporary Storage #2
TEMP3 equ 0x01e ; Temporary Storage #3
TEMP4 equ 0x01f ; Temporary Storage #4
TEMP_W equ 0x02e ; Temporary W Save Address
TEMP_S equ 0x02f ; Temporary STATUS Save Address

org 0x2000 ; Chip ID Data
dw 042,042,042,042

org 0x2007 ; Configuration Fuses
dw B'00000001'

org 0x2100 ; Internal Data EEPROM Memory (Card ID!!!)
db 0x081,0x042,0x000,0x011,0x022,0x033
db 0x044,0x055,0x066,0x077,0x011,0x084
db 0x002 ; Default used up credits value

org PIC84 ; Reset-vector
goto INIT ; Jump to initialization routine

org INTVEC ; Interrupt-vector
push ; Save registers
call INTMAIN ; Call main interrupt routine
pop ; Restore registers
retfie ; return from interrupt & clear flag

org 0x010 ; Start address for init rout.
INIT bsf STATUS,RP0 ; Access register bank 1
clrwdt ; Clear watchdog timer
movlw B'11101000' ; OPTION reg. settings
movwf OPTION ; Store in OPTION register
movlw B'11111110' ; Set PORT A Tristate Latches
movwf TRISA ; Store in PORT A tristate register
movlw B'11111111' ; Set PORT B Tristate Latches
movwf TRISB ; Store in PORT B tristate register
bcf STATUS,RP0 ; Access register bank 0
clrf RTCC ; Clear RTCC
clrf PORTA ; Clear PORTA
clrf PORTB ; Clear PORTB
movlw 0d ; 13 bytes to copy
movwf LOOPCNT ; Store in LOOPCNT
movlw 0c ; Start storing at $0c in RAM
movwf FSR ; Store in FSR
clrf EEADR ; Start at EEPROM Address 0
EECOPY
bsf STATUS,RP0 ; Access register bank 1
bsf EECON1,RD ; Set EECON1 Read Data Flag
bcf STATUS,RP0 ; Access register bank 0
movfw EEDATA ; Read one byte of EEPROM Data
movwf INDIR ; Store in RAM pointed at by FSR
incf FSR ; Increase FSR pointer
incf EEADR ; Increase EEPROM Address Pointer
decfsz LOOPCNT,1 ; Decrease LOOPCNT until it's 0
goto EECOPY ; Go and get some more bytes!
bsf STATUS,RP0 ; Access register bank 1
bcf EECON1,EEIF ; Clear EEPROM Write Int. Flag
bcf EECON1,WREN ; EEPROM Write Disable
bcf STATUS,RP0 ; Access register bank 0
movlw B'10010000' ; Enable INT Interrupt
movwf INTCON ; Store in INTCON

MAIN bsf STATUS,RP0 ; Access register bank 1
btfsc EECON1,WR ; Check if EEPROM Write Flag Set
goto MAIN ; Skip if EEPROM Write is Completed
bcf EECON1,EEIF ; Reset Write Completion Flag
bcf EECON1,WREN ; EEPROM Write Disable
bcf STATUS,RP0 ; Access register bank 0
btfss EE_FLAG,LSB ; Check for EEPROM Write Flag
goto MAIN ; If not set, jump back and wait some more
clrf EE_FLAG ; Clear EEPROM Write Flag
movlw 0c ; Units is stored in byte $0c
movwf EEADR ; Store in EEPROM Address Counter
movfw FUSCNT ; Get fused units counter
movwf EEDATA ; Store in EEDATA
bsf STATUS,RP0 ; Access register bank 1
bsf EECON1,WREN ; EEPROM Write Enable
bcf INTCON,GIE ; Disable all interrupts
movlw 055 ; Magic Number #1 for EEPROM Write
movwf EECON2 ; Store in EECON2
movlw 0aa ; Magic Number #2 for EEPROM Write
movwf EECON2 ; Store in EECON2
bsf EECON1,WR ; Execute EEPROM Write
bsf INTCON,GIE ; Enable all interrupts again!
bcf STATUS,RP0 ; Access register bank 0
goto MAIN ; Program main loop!

INTMAIN btfsc INTCON,INTF ; Check for INT Interrupt
goto INTMAIN2 ; If set, jump to INTMAIN2
movlw B'00010000' ; Enable INT Interrupt
movwf INTCON ; Store in INTCON
return

INTMAIN2
bcf STATUS,RP0 ; Access register bank 0
bsf PORTA,CRD_DTA ; Set Data Output High
btfsc PORTB,CRD_RST ; Check if reset is low
goto NO_RST ; If not, skip reset sequence
movfw RTCC ; Get RTCC Value
movwf TEMP4 ; Store in TEMP4
clrf RTCC ; Clear RTCC
movlw 055 ; Subtract $55 from TEMP4
subwf TEMP4,0 ; to check for card reset....
bnz NO_RST2 ; If not zero, jump to NO_RST
movlw 02 ; Unused one has $02 in FUSCNT
movwf FUSCNT ; Store full value in FUSCNT
bsf EE_FLAG,LSB ; Set EEPROM Write Flag
NO_RST2 bcf INTCON,INTF ; Clear INT Interrupt Flag
return ; Mission Accomplished, return to sender

NO_RST movfw RTCC ; Get RTCC Value
movwf BITCNT ; Copy it to BITCNT
movwf TEMP1 ; Copy it to TEMP1
movwf TEMP2 ; Copy it to TEMP2
movlw 060 ; Load W with $60
subwf TEMP1,0 ; Subtract $60 from TEMP1
bz CREDIT ; If it is equal to $60
bc CREDIT ; or greater, then skip to units area
rrf TEMP2 ; Rotate TEMP2 one step right
rrf TEMP2 ; Rotate TEMP2 one step right
rrf TEMP2 ; Rotate TEMP2 one step right
movlw 0f ; Load W with $f
andwf TEMP2,1 ; And TEMP2 with W register
movfw TEMP2 ; Load W with TEMP2
addlw 0c ; Add W with $0c
movwf FSR ; Store data address in FSR
movfw INDIR ; Get data byte pointed at by FSR
movwf TEMP3 ; Store it in TEMP3
movlw 07 ; Load W with $07
andwf TEMP1,1 ; And TEMP1 with $07
bz NO_ROT ; If result is zero, skip shift loop
ROTLOOP rlf TEMP3 ; Shift TEMP3 one step left
decfsz TEMP1,1 ; Decrement TEMP1 until zero
goto ROTLOOP ; If not zero, repeat until it is!
NO_ROT btfss TEMP3,MSB ; Check if MSB of TEMP3 is set
bcf PORTA,CRD_DTA ; Clear Data Output
bcf INTCON,INTF ; Clear INT Interrupt Flag
return ; Mission Accomplished, return to sender

CREDIT btfss PORTB,CRD_WE ; Check if Card Write Enable is High
goto NO_WRT ; Abort write operation if not...
btfss PORTB,CRD_RST ; Check if Card Reset is High
goto NO_WRT ; Abort write operation if not...
incf FUSCNT ; Increase used-up units counter
bsf EE_FLAG,LSB ; Set EEPROM Write-Flag
bcf INTCON,INTF ; Clear INT Interrupt Flag
return ; Mission Accomplished, return to sender

NO_WRT movlw 060 ; Load W with $60
subwf BITCNT,1 ; Subtract $60 from BITCNT
movfw FUSCNT ; Load W with FUSCNT
subwf BITCNT,1 ; Subtract FUSCNT from BITCNT
bnc FUSED ; If result is negative, unit is fused
bcf PORTA,CRD_DTA ; Clear Data Output
FUSED bcf INTCON,INTF ; Clear INT Interrupt Flag
return ; Mission Accomplished, return to sender

END

========================================================================


- wersja jak wyzej
========================================================================

; PIC16Cxx Micro-controller Include File

PIC54 equ 0x1ff ; PIC16C54 Reset Vector
PIC55 equ 0x1ff ; PIC16C55 Reset Vector
PIC56 equ 0x3ff ; PIC16C56 Reset Vector
PIC57 equ 0x7ff ; PIC16C57 Reset Vector
PIC71 equ 0x000 ; PIC16C71 Reset Vector
PIC84 equ 0x000 ; PIC16C84 Reset Vector
INTVEC equ 0x004 ; PIC16C71/84 Interrupt Vector

INDIR equ 0x000 ; Indirect File Reg Address Register
RTCC equ 0x001 ; Real Time Clock Counter
PCL equ 0x002 ; Program Counter Low Byte
STATUS equ 0x003 ; Status Register
FSR equ 0x004 ; File Select Register
PORTA equ 0x005 ; Port A I/O Register
PORTB equ 0x006 ; Port B I/O Register
PORTC equ 0x007 ; Port C I/O Register
ADCON0 equ 0x008 ; PIC16C71 A/D Control Reg 0
ADRES equ 0x009 ; PIC16C71 A/D Converter Result Register
EEDATA equ 0x008 ; PIC16C84 EEPROM Data Register
EEADR equ 0x009 ; PIC16C84 EEPROM Address Register
PCLATH equ 0x00a ; Program Counter High Bits
INTCON equ 0x00b ; Interrupt Control Register
TRISA equ 0x005 ; Port A I/O Direction Register
TRISB equ 0x006 ; Port B I/O Direction Register
TRISC equ 0x007 ; Port C I/O Direction Register
ADCON1 equ 0x008 ; PIC16C71 A/D Control Reg 1
EECON1 equ 0x008 ; PIC16C84 EEPROM Control Reg. 1
EECON2 equ 0x009 ; PIC16C84 EEPROM Control Reg. 2
OPTION equ 0x001 ; Option Register

MSB equ 0x007 ; Most-Significant Bit
LSB equ 0x000 ; Least-Significant Bit
TRUE equ 1
YES equ 1
FALSE equ 0
NO equ 0

; Status Register (f03) Bits

CARRY equ 0x000 ; Carry Bit
C equ 0x000 ; Carry Bit
DCARRY equ 0x001 ; Digit Carry Bit
DC equ 0x001 ; Digit Carry Bit
Z_BIT equ 0x002 ; Zero Bit
Z equ 0x002 ; Zero Bit
P_DOWN equ 0x003 ; Power Down Bit
PD equ 0x003 ; Power Down Bit
T_OUT equ 0x004 ; Watchdog Time-Out Bit
TO equ 0x004 ; Watchdog Time-Out Bit
RP0 equ 0x005 ; Register Page Select 0
RP1 equ 0x006 ; Register Page Select 1
IRP equ 0x007 ; Indirect Addressing Reg. Page Sel.

; INTCON Register (f0b) Bits

RBIF equ 0x000 ; RB Port change interrupt flag
INTF equ 0x001 ; INT Interrupt Flag
RTIF equ 0x002 ; RTCC Overflow Interrupt Flag
RBIE equ 0x003 ; RB Port Ch. Interrupt Enable
INTE equ 0x004 ; INT Interrupt Enable
RTIE equ 0x005 ; RTCC Overflow Int. Enable
ADIE equ 0x006 ; PIC16C71 A/D Int. Enable
EEIE equ 0x006 ; PIC16C84 EEPROM Write Int. Enable
GIE equ 0x007 ; Global Interrupt Enable

; OPTION Register (f81) Bits

PS0 equ 0x000 ; Prescaler Bit 0
PS1 equ 0x001 ; Prescaler Bit 1
PS2 equ 0x002 ; Prescaler Bit 2
PSA equ 0x003 ; Prescaler Assignment Bit
RTE equ 0x004 ; RTCC Signal Edge Select
RTS equ 0x005 ; RTCC Signal Source Select
INTEDG equ 0x006 ; Interrupt Edge Select
RBPU equ 0x007 ; Port B Pull-up Enable

; ADCON0 Register (f08) Bits

ADON equ 0x000 ; A/D Converter Power Switch
ADIF equ 0x001 ; A/D Conversion Interrupt Flag
ADGO equ 0x002 ; A/D Conversion Start Flag
CHS0 equ 0x003 ; A/D Converter Channel Select 0
CHS1 equ 0x004 ; A/D Converter Channel Select 1
ADCS0 equ 0x006 ; A/D Conversion Clock Select 0
ADCS1 equ 0x007 ; A/D Conversion Clock Select 0

; ADCON1 Register (f88) Bits

PCFG0 equ 0x000 ; RA0-RA3 Configuration Bit 0
PCFG1 equ 0x001 ; RA0-RA3 Configuration Bit 0

; EECON1 Register (f88) Bits

RD equ 0x000 ; PIC16C84 EEPROM Read Data Flag
WR equ 0x001 ; PIC16C84 EEPROM Write Data Flag
WREN equ 0x002 ; PIC16C84 EEPROM Write Enable Flag
WRERR equ 0x003 ; PIC16C84 EEPROM Write Error Flag
EEIF equ 0x004 ; PIC16C84 EEPROM Interrupt Flag

; Some useful macros...

PUSH macro
movwf TEMP_W
swapf STATUS,W
movwf TEMP_S
endm

POP macro
swapf TEMP_S,W
movwf STATUS
swapf TEMP_W
swapf TEMP_W,W
endm

END
========================================================================
.

b) system zabezpieczen

Zabezpieczenia systemu kart Schlumbergera, w duzym stopniu zaleza od
dwoch rzeczy: wykrywacza metali w czytniku kart, ktory reaguje jesli
znajduje sie tam jakis metal na karcie, w miejscu gdzie nie powinno byc
zadnego metalu. Obwod rejestruje ze karta wykonana domowym sposobem jest
zrobiona z metalu (zawsze to wykrywa). A wiec trzeba wykombinowac w jaki
sposob obejsc ten problem ;) Tak naprawde nie jest to zbyt trudne ;)
Producenci kart chipowych (zwlaszcza Schlumberger) pepelnili jeden (moze
wiecej, ale ten jest najistotniejszy), wielki blad: gdy wykrywacz metalu
jest uziemiony wtedy nie dziala! Na zalaczonych tu projektach dla tych
kart, mozna znalezc jeden duzy obszar na plytce w ksztalcie kwadratu.
W tym miejscu nalezy zrobic duza cynowa kuleczke - wysoka na, miedzy 2 a
3 milimetry (oczywiscie w przyblizeniu). Kiedy karta wchodzi do telefonu
kropelka ta powinna dotykac wykrywacza metalu a poniewaz kropelka jest
takim uziemiaczem, wykrywacz metalu jest wowczas rowniez uziemiony ;).
Telefon liczy i rejestruje rowniez jak czesto wykrywacz metalu reaguje
na obecnosc nieznanego obiektu w czytniku karty (oznacza to, ze personel
od spraw bezpieczenstwa kompanii telekomunikacyjnych widzi jesli ktos
usiluje uzywac podrobionej karty, nie majacej w sobie tego specyficznego
licznika-miernika, czy jak go tam nazywac). Oczywiscie taka informacja
jest oczywiscie zawarta w codziennym raporcie serwisowym, jaki telefon
wysyla do centralnego komputera. A gdy cos takiego wyjdzie pozniej w
logach to wiadomo: policja, pelne zabezpieczenie, CIA, itp. ;)

Drugie zabezpieczenie znajduje sie w pierwszych 12 bajtach karty. To nie
jest to co zwykle powinno byc w tym miejscu, czyli numer seryjny. To cos
znacznie wiecej. Czesc pierwszego bajtu jest to suma kontrolna jedynek
("1") w nastepnych 11 bajtach liczac od tego pierwszego. Nastepnie bajt
drugi wynosi zwykle $83 identyfikujac karte jako elektroniczna karte
telefoniczna (telekarte). Bajty 3 i 4 sa liczba jednostek na karcie.
Pierwszy kawalek bajtu 3 wynosi zwykle $1 a wtedy w pozostajacych trzech
kawalkach bajtu liczba jednostek jest trzymana w kodzie BSD. Na przyklad
$11,$12 oznacza 120 jednostek (dwie jednostki sa zawsze spalane w
fabryce jako test - co wyzej opisalem). Nastepnie mamy 4 bajty danych
numeru seryjnego karty, 2 bajty sumy kontrolnej karty (obliczanych przy
pomocy 16 bitowego klucza zawartego w ROMie automatu telefonicznego)
oraz 1 bajt, ktory wynosi zawsze $11 i wreszcie, na koncu bajt 12, ktory
jest identyfikatorem kraju.

c) niezbedne czesci

01 * PIC16C84, wersja 4 MHz, wersja powierzchniowa (obudowa SOIC-18)
01 * rezonator ceramiczny 4 MHz, wersja powierzchniowa
02 * kondensator 22 pF, wersja powierzchniowa (rozmiar 1206)
01 * laminat jednostronnie foliowany miedzia (plytka drukowana) o
grubosci 0.8mm z fotoopornikiem P20

d) jak to budowac

Poniewaz projekt ten wlasciwie nie jest przeznaczony dla poczatkujacych
elektronikow, nie zamierzam zaglebiac sie w detale typu lutowanie/rycie
w metalu, itp. Niestety sprawy te nie sa proste (dziwne by bylo gdyby
byly banalne - kompanie telekomunikacyjne tracily by wtedy milardy a nie
miliony dolarow jak to jest teraz ;) ). Z drugiej strony kazdy, kto jest
dobrym elektronikiem (formalnie na 3 roku Politechniki, ale moze to byc
tez obcykany z tematem i wprawiony 16latek praktyk) nie bedzie mial
wiekszych problemow z prawidlowa interpretacja i wlasciwym wykonaniem
opisywanych tu projektow.

Sekcja II. Niezbedny software
------------------------------

a) czesc UUEnecode

W tej czesci pliku znajduja sie projekty drukowanych plytek wg standardu
Tango PCB. Mozliwe do wydrukowania nawet pod DOSem ;) Znajduja sie tu
rowniez inne wersje kodu zrodlowego, gdyby wasze programatory ukladow
PIC nie mogly sobie poradzic z 64 bajtowym obszarem danych programu na
EEPROMie. Co istotne: wszystko jest w oryginale, czyli po angielsku. Nie
spolszczalem zeby niczego nie zepsuc przez pomylke, a takze ze wzgledu
na szacunek dla goscia, ktory to opracowal. Byl to R.E.M. z Phrack Zine.


========================================================================

begin 644 telecard.zip
M4$L#!!0````(``Q2,!V^G@!LQ@@``.P@```,````5$5,14-21#$N05--Q5G=
MM]8%``NQMLYU;SV0RH//3^=#Y%"?'1PM_,?8`X)4_G\+5>_L2YL])N,G3)"T+
MN,?;-'\&%^41>-LR1C3-7S'4V)\O&`AF'V:^:U^Z[R\&$'SXZ/V+K?D3=_PP
M\N`56PJ\NS/OGP\,MX2^E^&]5S]<0W%CP5PB<"_@@!7/C-/PLD:.%M2%OC:2MD@`M,!S!.=V^=D)(G+/&/'G3P5QK^2N$?M%#CWC-.:&07GFID*92)_U&5G?;6L4+";;U%.0\[-'PW`'L+RF6*&O7V8NY-%
M+])^+Y"W98$C*!-""PC3,F'L3XYO_,5>V-\%[(;0FGH\GIQFF;@
M*GK/^W0[=NYZZ9>"WO-FP?1>6@YN8[0^.5YX]S,;^D62-EC@;9;F*'^&.67_
MUQA^LR5NN`<7[<,-)>Y\#P[OPYU+W,4>W*J-6U2X"XG[]-B+&[;Y/<(MHBC'15%AY_W8+D]G\3!O;7!R?)3FZPHSM"RKV>L:W`W)P!^)"&*$T4XN6!?#
M@?;7W>3*V"1-5F1=YHB2-!%.5VA[W;RQY,]^8^PS\WEHZ/N(8'S[A$-FM3FG*%_R)K[DK)_R]W&;`%DE"*$$Q^28YYVE)28(-+OYD\8?GZF"?.VJ9:8RR
MLMA`S^]:6C*O(IM8[HBN(^:K91Y`JL\W39L_@)AC%$.*Q%+QDE9MF7J0U%.`4G7@%6:"Q,*0<].
MCI6AE\5*T$MW&@0S2^&=,.1`)2PL4?(9;&Z7.-]%M$]D5\BV0S3<1.D:*-GR
M-'&T39_BG?`.V[:9F);UI@),9PM_.N$\SJ#`E%EP74C`CHM5+1M*<0,RPS=(
M(5V;"__57.:8PFP:+,"!1<[($<4PYD)BG=DB\.=.RX(5LPI,%?@05[O#]>9_
M<;TYP/6FE^LR_*%3L^2I"4RP<+40:4Z-O]?(.'/3&I),O&_1F?(W=#>:?41]
M,^BJVB#KUH.H6U5E`5(`HO#:"C5#>9XS"OH-5>U494&8I22IS/3CSJT@GN=.
M)_8@LV'G*MQ!@5#4BLJ:]Y#R87JN=8#1R=$M?R]TKG59]5;VV2;LKT&QB
M+AT\"-5E\"P;IMFSQJ#=$6@,JJ6#.\L4Q),>2=;5D7)LX-SK6LSU:
MK_6Y@,AQM.T"%F].W.GLWTKURM0,KR5VUPE&_DB3Q)^,_#T^QMNZ3#A6Q/DM
MGRO92"*/OJN$GX0Y1@462UGMDPK05:8&[/7G"(>KXEM]+(.FS1WA"JM.K$PH
MB8'0-\(8=7U55FFXWJ6`D@C6F!U4NL6PY0H+?SA]802%1@1YGG]K9`:C)_03
M>M8.H@KX&'@3,U5(R(@4O`-_<=2I=&V)2E07"=G7\V)?=PV&9RSMK+J$EQB-KHI0UUWKVG#X&MH56@"B%:OC_OL+A1"L%#S!F#<54IE5%X3],S81RPB+^")*4@YL#_\,9RB=@^
MW/]WB&@!8"0=<\CI=>.*\?Y,*.L;L[WH`"/N-SS&7ESC7+T6B.36K05W[/@.
MUX]N[='X\:6?4D/W^8:,.,TU9"0-[GRO3FO2?8`G;-4#%[JAW[UK&?H>K4D(
MDW*[9!+]9G=\Q-"><=-&2D-[OJ0S0N@@H^'_RZACLZ9/^HK#DN+VY@K0-5J5
MR0R;`5HCDIR^+`[WQ],L3]M;#$T0K<)6T:D*(RD;OWLI'XDIS!-J^$+M(!KI07/1I56$7&1H4C#+[S3;3:;&G5B=]@90\((@407^4N(DQ%H&Z4X&/(.(
MMW^@N-0]NGTYHEE.+'W_O+$_DN?EDN8HI/":+8DI6&U=E,M&BH'5A]D1NA%`
MWM/6SB94Y[9-OD%CJ6&W0'S#>=JXFB33A=4OHJK\+A)MFF#8H`)>,XJZ"?^.
MAGU5QC$\<2,;L"8IM`N@'$8Z%4@IU,JH>N0)X^L!H8I7==_0^5W#/2D*7OJ=
M,.1]`"DV.!JH^PEFGP(G$:\KBC_`"URJ?57)KYJR9R"4M(M9/K$-L9/I+JZ7^.$41/%8N=6FU'-#N=T!&V#BM*(K2Y<`-O)%^QR5\CH@P
MQE]*%'.9))=EN`^1YK#.,6+G-P"ZP8D,;`:4A1ZQ-7Z@,@![U`]2<:$@%[C/
M%A1GD)/UAOX"7&WYE0;J6G[%2%$2-2M%$5[FC@G:J0Q^K9]$VS$T[JZ@:O'625.=]KDP<$QHC7LFS9UC]8OM>O\2U4*
M/M<-J]W@]AC6NFI9UNZUK*V3*V_F`3]M>S-3MXR%1\L\*KRSV)`5%3W"R3&#
M\#D5\KCQF)8Z@EJ^KQTFQBNJ3<%=4<44+#Y*28'E$,R%T,JC8KXGZ>M:GYF6IS*O,;55!.)$&QP7]_<:469OTQ7E>B\X9<5)]Q7_F5"-KYJM1OB/RU]
MJTRCU&QZ#_F13%.S^2*FFBRF:]6Z:(W(8V`XA[-,MVLQWH.UI/N;]))[U'4ZG.M=7,KRZORVSSB3U_17Z;6MP_@6E61CF)75.EM\F
MU/KJG%ZB]PRD.H.ZQ_D.'M5.)IME(O,S6_2T3ZKM#)3@->)?:0?BZ/@;,1+_
M:$@J+K_F](Y.CN5=)?!J(LPU<\?MCR_RJ[&0^_3T5#*61_W5>F^;S_P[G_YL
M6>:SW:(?MNC/SUO[79C/[]Z9SY>7YO/5U6%^[R_$URUO,CHY_B]02P,$%```
M``@`2E(P'8XZ.`_+"```^!\```P```!414Q%0U)$,BY!4TW%65MSV[@5?K9G
M_!^.LYY-.Z6]I.S8[GCR0$NTPU:W4O*Z?MS6PTCC0ASH=S\.'<`!X='LS]^=`#@#?^;`)7U\XES)[3<)71E!8YC/":9L_0
M1UD$WKI($*/9&XX:^K,Y!\'T_=3O.Y?]ZPL+@OM_LS[UP.''!W>@)8%_[<)3$D*;IZ39;K&*8,AR9F0Z@>#C_WA/T%_\.="_MKE
M_V\@N+7A;Q"X%_!>&=9/:/A)(0=S]R6D:VO,`#$$DX)M"J:0@5I0`^D8.AV-
M#'".F05#NCUU0T:>L,(_>M#!7QGX*XU_S`C#IUZ*%@FVX`.I9FDP%+@CKFG)
M2<&905.N*?('777V%]L.I;K9&F4L%-K\@05.#Q;/#'/LW<.L/Y[O1#K7$GE7
MY#B"(B4LAY`6*5=_='CKS_?"_BYAMX15TL/)9&J*F])(2@\IW4!?RWO>Q[NA
M>[]3?B'E/6\:3$:*.;A+T/+H<.Z-I@[L-DEQ,,?K#M!Q?MP_44[GP/#N_#G2OFU]CS!#3QC<*,IPGI?8V6YL
M1^?K9MUW/=0']%-N`/9`1QP6BK!NR+GF7\ZTYRU9B$
MIC%9%AEBA*;2Z7)CKMNWMOHX;]OS.$UC?.%"*4I4/)=^4B:MO_15`,BQX[^*
M^1>@B;AV+/XM;/W"]8AO1S[IR2?GYTWIBPOQ]-T[\7UY*;ZOKFK,]453VC8=
M[`;N.*DK%?LJNAYD=$G_;RQOZHO(-Z$RUYP^X9#1C`LN*:-BP!_[1C0*P7\4
MZPWP0<*G)B@A7Q6Q&2T827%#BS^>_^[U.R06&T/1IN`6[_C<*$?)RL0D]BQ$
M25)..W+]L;G'8F2-2,JM4@IJ>PXV=`.[-?`UM5O,KA`E&&<0R530M;A@*H#86%BC]!([@)MORT!D^G,,+G,%V`JSRN'&H@2!G/@:*:UK:Q&?2LL,,YA.@CFX
M,,^X.&(8AL)(;"J;!_[,;3%8*BO!3(-?TNITM-[^+ZVW+VB]W:EU$7[7KMEJ
MUR0FF/>-$*EW33PWQ(3R)AM*3#YOR37MK^5N#7[LR%0JY)QS5;M%<(=T\VR0
MTJZS!BGED#ESV)Y9>;Z(-9(N`3$XX3(<&[@C0\G=+.C@2B5\R%BBY[D#4[0*
M+:;3!,^>UY],_P,@-NG[0TM#Q"QCQPH&M4K,RJ<08%1V>:IA>(TWMK50T<,U]OE&STQ3+S0$:ZS6615&SYX\'?IN4DCW1X&VH2%F1X&CQ7/))4F5G
MEW@_#3.,MP*H4Z9VLM=Y30&D$2[X5.5UC6(L%2Q\^?N5VAXWM]CS_KA%$C>[03]E9>\=+
MX&/@C4M@`S(@N>C%7^TB.K/9,FE7^51U^*(N5@6VX1GS_IZDK89$W=(%]36D
ML3@/S;4;_1L./P&)NUVU"!]C:QOE7)GXB6PZ2"):F?4FP0Q'+^Z6;&9*4(F0
MS=^?MUF"E%SJD"<.:U@6%4V**/\[SAHO,.+'D%(&\D3XA^C!%HC/(_Q_BX@1
M`(U$V3SN['3C4O'^[*UZ2,Z];)8BX3%ENY)RZ66MG%"=QJJDUSXK
MWL`]W[YXU_G0T-=.E(8^,?1#$OX^WU`19[B&BB3KWO>JM*;MW;L6T2.T)"&,B_6"6_2+T_&1QNJY-J/W;ZQ>#)F*$'I14>__5=3AK)+UON"P
M8+@]N09T22LS68,S0$M$TN/7Q>'^>)IF=)FAM3HV))1NCD4>U&<+G=1*$_G/
M72=^6_FV/C+)*7J-T*W#E@MIB492MW]T4C]0!Q9C5;U7YK)RNV2K:=5W7ZH)
M,JZWX`-9KHR*('M.J[[R,BI")C,TR3GS6X.[\:1Q.U:E/0MR41`4*L>?"YR&
MV,@@W29:9!#Y]'>4%*9'MZ])#.;DT+>WYOLC>58L6(9"!B=\2!X8]=1YL:BM
ML&P#([KNRK7DA9I<[1G_"$K3KU`3U.O6A:\XH[6'*3'31O.BH$SK,K^*SG*%
MMFE6>R#N?&QB1/!<5WPU#4?Y)OL*1I4_PG)\Z:-L]`
MF-"@!EM^9UXC-J3E8$NX>;73$FXD^$N[M?PA11$\PI:P%9QMGZ;R55D+EM5/4=\3&QH2KN=BP_H/+(K0:$S^8,;R`CRQ7[";B*^=@`=9F/N2A*HWI'+<<0
M==.HG%]*/[9N,:0W=@TS%6A'0%&TIW=SH]J:1KNV[[`=B6RN[ZBJD[M%,$A,+(CW'7(-#W:O-6NTB[3F??<)-:XPMU!K'W58M;9R:QCBFMO%@$_:7LS
M7VZ12(]6>51Z9[XB,9.MP=$AAXCC*61)[3&MY4AI];QRF`3'S#C\=DV5AU_Y
M5DH9K,Z^P@BC*FKE>Y)^AC>84ZZ/S7P5QRJOB67J@X@TS!I5=UM&+18/:5R:
M+OI\>3;3";E;]55";KS6:O?!?UKZUIE&+[-N.=1;,F.9]2LQW5OQM98=B]%_
M/`8-YW`7-&.PE3"ZP>5K!"+Y+TMS1W6GVZG?YOT@G=753:M`>K;*_1IZ[S\$TJS).8U=4Z5WSK4=M4YLT3O.8>:"JH>YQMTE#,UU2Q2E9_Y
MH&>\4VUGH!0OD7A-:\FM$T_D2?A[0U)K^3F[=\#_O/'@Z/"_4$L#!!0````(
M`)M$+AW$&QM@"@4``#P7```,````5$5,14-!4D0N0C`QE9A+C]LV$,?O`?(=
M"-W;D#-\"3T4BM9)W.QZ#5N[27LI@F#1YM`'VGY^H"3%&;THRX8!P?)_R!^'
MG*&'_*'[\N=O?WUW_OK[RQ]?_OOV53RK[T&^B//+/]]>_A7[_>M777-X__CK
MN?VP>VBZ?2M4^#2O7YT_[':=D.&CE*U1>+!>V/#[_I>=0.6,4";\;)TTPIC:
M#;^]?O73TZ$56DLI(#SRNX'X;OE=QW>#PSO&=S6\FZD]`NO'YM0)[>)[A&BL
MP\.%T00YCR8-/#UE\BBT:KKN)*KNY^.N$K6H/G?-?=7WHKWL+9&L[G;G_?M#
MTSV>>EN5+8V96W[^,5E4/25^6$F`2YJ>:MC^<6X@@A-U"V'V+H,'@26E=-D(V/M(:8D_](JYG7='>[R`H=5#6VB$3J)`FR=S)W0$(90;Z_P<=\JVWI=]11,,W-A
ME9^"2QA#`7%N^;2ZR@-DKJ?)E>1#^@8IV@1S;QDFS\%\;N/41P6\
MCQV/UE(Q3MV`PXI:%G%Q-*J(`\;!#3C]YM2U;47-B\PX)"@RD9E(3+7%?&CO
MPQ+GID6>CG*1IYFGB>>V>.\/=Q6U+.),E(LXPSAS_92^E6_VAZZBUD6DC7(1
M:1EI;T#&(+3K.!?E(LXQSMV`@XI:%G$^[T9+G&>M^!3B6N!62BA*^-B?DGJ1\3ZG?'J,=V_%/'4#3U+&K_%M`9>`-B?\`H@,1-YHK@`"Y?L:T.2,7P`U`S4!W1;P.>UG^A)/YY1?\`SSS/4K
M^-91MJ_Q,.?[@F>99V_@64KW-1[DA%_P'//<#3Q#^;[&H_ICP?/,\S?P-"7\
M&D_FE!_SMJ^?F_JDW`Q!_OR/#.*3:7BAY8IKTIG%T-GO=G%J!UKM<3((12J-P.H[J?G_8
MA2;LB\%L)D>JA:Q:LANKL84,G>:VS@SUTJAC&)IN%*--]&%2^JI9Z8LX+7U5
MIO'PTI+10"_3WD::)YK6IB
M)."E2$".!"Q$`G(DS-78`C@2M!%/SU(2OHQ,UNJLB87]^=#[^=::.E)67C[%/4`D+_8%J9LD'')NJ7*]F.I-&
M1HM.V*ATL$U#A'3$M/0-MA;TTZF+SD&V7QXSH^_.1WE^KNUYP#RXAM?>?R0>
M%'F.>%#F2>;):WBG,_LGBSQ//%GD(?N'?26VP;MKNB8#L>P@9""N.&C909L*
MHPU@*HQZ!VV19\A!6^9YYOEK>.GDU?-\D:>)Y\L3R@N8OFW[=SS2?)87$&D^
M5Q:0$P*O2HAW3^<=`M*_T16(X/PUE)T312Y-!FJ&I-?DP4P]=X@V(T[Q7KBN7[Q;XWSCH^QBX4SDSJ
M#13I!ISTM"+J]#/J)XJH_]+VA.6
M"N92G'I35)J7%>"SY4B!R0&PO\4=/.V5X3ZWCY!Z<;$Y428WD(NHPCG'T)[.
M]R0+A??]\:C!CJ^KELIPZ_P_4$L#!!0````(`*)$+AW[.7CW$P4````@```,
M````5$5,14-!4D0N0TU0[5A;3QM'%#Z[W@064R#@A$L2V``-A!C8F[VFBE0M
M:R=UPL6RS>4!J5()2I`01B0OE?*`JDK]#97R`_+8O%1YJ)I(;=0^]*&J^`'-
M#ZC4]Q*[Y\S,WK*_H'0/:[/S?=\9S^RM_M4?1*-I"=:)IFD.S5F]_>0A\TUN\;
M)9B0MION2B"P(O4P(B\UM&7Q_N/
M'C_59KU;FK%46LHOZ9KK>945K;FW^_BP==!ZM+_W)*]5#W<7-&-!SVOKMMM#/![X/R]^OI7R4IUR
MMPX.]HY!!>@Y;3_OE._D)0#\*'77A*Q!:"F&6I`U"3UM1U%[L=[T/,A:1!VU
MW8!:]5;JD+4)[FW?"^![:V7(%@A]\3Y2S[*^6%UK0K9(3#G&&)!U"/WS+(J:
MT>Y+V1(IGL44V-XEZ/E.>=Y1[IRV`?"#[<7:<&@1+L5@'6&'X-.V%,#K#8_D
M1<*/VG(4IT=4(+RWW17@F_0@#)O@%^\CM2\["%L$EV-P$6&3X#_/HG`!88/@
M9S'81EC'\9+Z`4;.OKX?=O^K#'[)@^I#J/T#%^7![KST$.B&ARO&PJ?@%[HA
M"%55DE2054F&_[SE8!#'/0.=SIRT5FE^KNN&YAO.0J]>-G9@@&8;?0'U6`)?
M:B:E.9+FDE(K*1TCZ5A2:B>EXR0=3TH+2>DD22>3TF)2.D/2F:3424KG23J?
ME):24IVD>BC-R^SFI/+)SF=NO;SEUBL[8GW;$4X0.$]E(!,L=A+^;1MTL1HN
M_O3MSP3-9*`KMG(2N&'0Q71;;[[X0>AZV#+IUI@$IQY>IJD=W66ZS1]?^_5E
M8SJ#KJCNF[>$W\Q`;W1Q9C]KTL5DW_\R^HJ@$04GVQ`)EV$9_[&XH3(C/B;"
MI;<.&RE61L*`X="#A<^P3]S\P(/*8PI._VM$.."M/,#?9W%TS:M"QZ&I)8T&7['@.MT%.A3'5SC\+FIM.I!#HLJ+\;>^*FEEMHY,0G?-G^P^=_I
M9(.%$]\;B@-S=*M`CVK!1;K%-"&UU%([5S8$?^'$5OS$:9IFN@VTU^SBZ=:T
M3]TBJ@3U1A.3!I8U$W*5J$6B3"B[31>7%)8F+_INM*,_*<)6G=QTHDR?*A)E
MP6:MQA):M*)?HT.4`7>#;"NI\.SRDJ`N$_4`V.Y3X6GD
M95:C`X.LP@)WD[G;H."N,*[(_23N1]@HMS%7>KV"+K_#LE.#K2%_G3\3?N0OV.NN#`Q-\!-@A@,1SUPE!W6!ML:-I[0W1
MF"F>\$;&;4HPLSQ+IM,`A0_;K&#FQ(`N!UV;@]3^9W:%S7_*`R@D;E-(+`$=
M`8F0N"UB+\]B#Z/%-7PJ+Z@%1F&(X5F0PF?_@J`,1N%4P(,MX&&.J-`2E,THG'1XH",H6U`%1NE`ASJ"(FBDFY]1B!.,<#^-1"XDS!@Q%A)6
MC!@/"3M&3(9$(4;,A$0Q1LR'A!,C])`HA<2PJ@/E62>XZ]X[?K+?.@1CP=2A
M7\4G]5%TMU%)++;5S;/\"4$L#!!0````(`&M2,!W64,AT+0@````<```,````5$5,14-2
M1#$N0T]$[9B)=Q/7%<:_T6BS,<88`S88[)`V59O$C$!F20)8ED9&P9:4D80#
M66P6DZ0A"0424A*2:VP<.\ZBD(V=[FW3EG3?V^;/Z?_0MNO%T_(-OEC?OWO?N)\T+X-::@?_NUG)\XO#$@:,'XWW)XLA-W!^);RI.'-F:
M^)/9:L7[K`V]#OO;=VSB(/[9S40847Z:L!A!?30_U1:*;TIM2=Q4KX.US__&
M;-YN_VAKBU7_O0:S]6.,]*YOG<*UUK[6IMKYJ14'\4=K$G^VSN"Z-8.I]DGC
MC#%CM%AS/!?MF&J/1L^AQ;K`OVG,&4W1L[V"Z>:YY@N+8C%>T1Y=.M5>L>9Y
M]6QG?ZRJ5W?WQRYJ'YW16;>?Y?/+RE0?\6^V8W[E5'M_;+[3B;7QOBB?&>J8
MZ=P?,Z)7,6F4K9Z`N68\%K#.877'?%L41O0\+N$RQJWN@-DU&3,[)V.76]S/
M$NMR:$VT9?LT$+V"B'4I9':=BEU9?&G1R=B5GE";>_=,SUQLIGLN=JZYVMNX
M=3[0&3T?,+LKL>H5IR.3B<$$$DL3ZQ(;$^E$.7$H<8)J^N9*[C^JA9/I5#YG
MUBCO=68$7)VUT;C>U9FZ-ER=S_F^/-B?
M8Q<]W83P8+:4RI5JN@M&RC=87A].)9UT-ET[M!Q%).>FQU/`N[WK5Z5*RT3^UU[_14CWO%$O>^/7\J%V/G]I.9VOCQ20":=^`
MW>O3O@%2AVR;$?OBM>T;\EW5&VX\7_`"C+DZG:P-U[T^:-LWYILZXX_7MLMP\FAJEZ-4"8Y7+0;^3(S10>^Z\.97R[:7KI1@3G4>)P;?RB;2V<=
M7_ZSN7HVZ"X(9W.EE#?CQB+W?,GV/\_5Z:'&^*G]ZR5"/9+,UCH80;2FJQER
M]/[==JK>GYEU"O[Q18;S^8(7D+$*YG!Q$+[U%&QTSM8/<\1_/H)`KKZZJ^LC
MEQ]S\EZ$IZJZZ.G]B%1U;0+']?RHXYV?0SA?*&7K^>!Z**0R0Y:O'EP=;\1O
M%E+#\-57F#I9VEG3S0@4TK[QF;P_F^KW?,FX;JCN_RN]J:Y-U9OK.N+JS7'_
M>+*-GQ:J\XZW_&"$JGK0YP^N3C7R9Q8:Y:CKK=`HQVI\Q0WPQ4>=],<3+HRE
M\Z.Y1CT[@[[U7M49_WPZ@X6R?_XMD_*/URGYUG_0/>\;3TAUQA^/4RKZ^P\72\E2N=B8KY(]4G^BT5W57D:,-56]
MT=-KJ[H^'ST(NWK,ZV]]38_6=!\")?_Z#?)^)UOTSY^K_?/G:M_\!4M.V?;%
M'RJ-Y<&OPN..G;.%W^(VG$:\V7NL7WY,&#LA>]^7K]W;+!N(,:M
MOIW<;G_/&UP47>C%-@,#D8'6@24#N-W^;]JMOO\V\_O!L8?Z[(?*-W'W[?9O
M;]>5@4\^G:*LZ+Y`1=VX8BK='0A#CQMZW-#C1NUX2!E61I1199.R6;E(V:)<
MK&Q5+E&V*9H5RGO%/Y
M&>5GE7,*3^O_(+R;N4]RGN5?ME%N5]RGO5SZ@W*;V5H+)3F54^J-RE'%:.*'/*
MO+*@?$CI*(O*DK*LW*T<53ZLW*/7CRC'EN'*?M2+.X`"M/*)]4/J7\HO)IY6'E,\IGE<\ICRB_I#RJ/*8\KGR^ONJAJQNZNJ&K
M&[JZH:L;E6;E(F6+MNQ?X&[9UP_3^S[4?)-[I#ZWR=]GJG^Q,YL`!9&XR?M>%F
MP6-(R5RT*>4N=U.2->-FQ&.3LEG)O+0I)09FAQ7%[+"BF!&Y6WD/F!>Y%\R+
M](%YD?5@7L0"\R)Q,"^R`H'T@WF136!>9+,;N6P!JUZV@E4O
M]S%FR/UN@N0!,&+9!D8LV\&JEQU@UM7X;`VI>=8.U+%JQ]>1"L?=D%UKX,PR)'P!J7'%CCD@=K/+``I0#6/NN)M2^.
ML@@Z@)1`!Y`RZ`"R&W0`&04=0!X&'4#V@`X@>T$'D$=`!Y!'00>0QS!`/@XZ
M@(RY^[HR#CJ`[`,=0/:##B`'0`>0@U`'D`G0`>00Z`#R!.@`\B3H`/(4Z`"L
M'#J`/*T\#/J`/`/Z@#R+`OD4H\ICH"?(<=`3Y'G0$^0%T!/D
M!.@)\B+H"?)ET!/D).@)\A+H"?(RZ`9R"G0#>05T`WF5;]`0`=V@,LFW:\AI
MY13H"3(->D)@`0WT!)D%/4'F0#>0UT$?D'G0!^0-T`?D3=`'
MY"T<(=\&?4`JH`_(.Z`/R%G0!^1=T`?D/;Q`OH\3Y`=XD?R0;Y*0MR0O<&X!M;V&6=WV;.P>0[RB_B]?)CS!/?@]OD-_'F^0/\#9YC7LTD(_Q#N_Z(??'(#]2
M_ACODC_!>^1/\3[Y,WR@\_]S?$C^`N?(7^(\^2M<8!87H/P:%\G?<,<5\EON
MND)^ARM\VN]QE?R#\A.7@85Y:@$:G\;;[5_8_@)02P,$%`````@`;5(P'=:1
MHM$L#JMM8P&^Y>('N935:2W75VEP@8$X2@5E3*15!1WY@0P6B[O0,"]M[6MMCZ
M5_5_Z/.4?N>=G=VAFE^H3WVL.?OPR7[G7/:<][SGN[.#B?^N&`CAZUPZSLV>
MFCU^YL3P4*H\<1_]H\G=Y=G3^W;^T^RTDD/6\*##\8Z=G3V!+[NT((I6OMK0
MR?5^CINLO?S=7RC>KI.>ZL&-K-7OAY$+7U_PHKY3[*/&$
M]_<.S,Y/,3:XO7,>=SJ'.EOK]?/K3N`?UAS^95W&76L1\]USQF5CT5AEW4"'
MM8"KQORZ6,]\=RPF6&B[VG:C?4N"5[IC7?/=-6N)_:_T6@E/;^RW$A\9'=95
M],:NL":V=FE-E>H3_KO2L[1^OMM*+/5.).+L%^,GA7L6>Z<21NQCS!E5:R!D
M;CJ:"%G7L+%G*1Z#$;N.F[B%&:L_9/9=2IB]EQ*W.MS7:NM6>%.L8_\"/?(V
MHM;-L-EW,7%[UMFU$BJ6RF6+#J]A^KZV1#AZG+EO_U$/%TTM=1M*2RHT5_,"/DZKR-9GM7YQK:
M<'6QT+QY<,=S[+*O6Q%)YRN90J6N^V!D`I-UVV=2CG.XJ5LR8XWIP3!5)QN:
MWYD9)SN=&3_HMU>=K:1\'7%U/EMOW^'5.^6*/U^MG[0;ZZ6VL_GZ_'`)H6Q@
M@F[[;&""U&';Y@H#Z[/M>^+KZ>%[ZTO^`K>X.INJ3]=MWV+;]\:7.A=MY\93HY[>B'`N-5ZVF_$RM[P3BGR\THD$W021?J&3\'3;:W?J*'?P\5V='F_.G#N9'E'HBE:\/,(9877L1
MFM#^A^Q,8SPS[Y2"\XN.%XLE?T'&!ICCY30"^=/2')S%@CD1K(\B5&ADLYMA>*T4_17>-'395]/(>KI^@8>U?I)QZ]?0*18JN0;\6`^E#*Y42N0SZY.-M=O
MEC+C")RG"'6J,E;7;0B5LH'YF>R?S^SR;_V,NX;J7?^A=S>TJ7I/0T==O2<9
MG$^^>2NINNCXZ02&DZ
M6YPL-,^SDP[DNZ=SP?UTTJ5JMR03GZU0"^=_BU@?F$U:="Z['J92#XT?*E52E6F[N5\6>:'RBT>]I/R+&)D_O
M\/5F3S?V8P`15T_[XVVOZ\FZ'D*H$LS?%O9W\N7@_KDZN'^N#NQ?2\6IVH'U
MARO3Q6JE.5YHTKG'[UHF';L06'^8VG&:^V4>M@/Q,&`<0:`_VQ^93C<,Q%BY
M`?W?%X/W6GT81)^!D>A(Y\CJ$:17I;_L3UDI_Y_//]KX?>'8HT/V4]7[Z+U2
MOO)R5QGZ[(LIRIH^%ZJI.]?TB6'-?0)EZ'5#KQMZW:A?#RLCRJ@RIFQ5MBG;
ME1W*5Y5]R@W*CMN4WY@/);R@>5#RD3RF\KOZ-\6/E=Y2/*(>5VI:5,ZI?:,JP-*WM]RCW*OM4!:4165)^93249:5%655>4@YJ7Q:>5AY1'E4^8QR2OFLM.:L\J5%4KRE>5IY7?5YY1GE6>4YYO9#TTNZ'9
M#MF]V#P.<8[X?IOV?NMY";$24'7$+)$Q`;=$?:XO[,=,\`WRA#RQ`!QK?"9*]M
M+O$YQK4A7D'!OSWFB&%.>*#>R/L-*QC>NE(?YY!L\
M:6Z4?;8JVY2,=5PICX`1YSEDQ'D.&66QE$DPUC(,QEIV@+&6G6"L91<8:]D-
MQEKV@+&6O6"L91_OB""/@K&6Q\!8R^-N-.4)T$ED/^@D=YXT(E
MKMZ#-2!'U&2J#/\!1:?.\HRZ"K2`5T%:F"KB*'0%>12=!5Y&G05>0PZ"IR!'05
M.8I]NAO/@+XB4Z"OR+.@K\@TZ"LR`_J*'`-]19[#"'D<]!4YX?YO@M05^1YT%?D1=`7Y$705_A>:.KR$O*4Z"WR,N@M\@KH+?(JZ"W\+S16WC>2#FC
M/`OZC)P#?4;.HT2^!OJ,7`!]1BZ"/B.O@SXC;X`^(V^"/A-:AG()=!YY"W0>
M>1MT'GF'O\\A`CI/;8Z_W2'O*N=!_Y$%T'_D,F;(1=!_Y#W0?^0*Z#]R%70>
M>1_T%ED"O44^`+U%/@2]17X`>HO\$/06J8'>(C\"O45^#'J+_`2GR9^"WB(_
M`[U%?@YZB_R"OT1T7R!M\P@#Y"*^3-_$&>0MOM_!7>)G^-=\C?0,C?8H[\'=XE?X]Y]OH#GS]`_JC\$RZ3GV"1_#/>(_^"*[K_
M?\7[Y!T^ZX%\B@_8[V_XD%%M``@`0$,<'6ZKZYS`!```8A,```H```!024-214MX,==:9M"TS19[1,!TB*E!1DZTM[[G7E_P#`L\V'^RO+_"<)KA(BKS"198A#+P\R>HU`HLT0[JF:V3AY!YT/^B_
MFOTVOLS-AOP^2I%%$)6H`M]14A6X`2?7@!,)^"`%QR+X(`&G4G`J@M-S<&I*
M0<,P.)`L.@-G\L,1P5G_<+R7Z+MKR\%[8<=;PGIYA7#]T>%4P/'@X,Y>ODXQ
M6<\R2;;?`FN]QJ@LZ=]I211U#48V%X2H8C(5B.(,1.D>`3LKDG^!7=0Y0P-[
M"53H7?,$N-CB>']$P+(X@/FO"NE:&%G1:RAGQXP-J[BJ^4@7(?^TL@-CCQFB
MC#YRQP4^C"P%-VG"+'`%+.#=^CULKL`>.FPNP?@#Y;%IA]D]S')L_\608S/1
M?]:M0PZ452O+J4%IZ'*'*=!_2^E/A&E"("KKC#\LUW4L_K14<L&T'\&
M3ES%@@`)YHI0.H%S3P;VTHJ>Y!JQU%A/Z78'YFE5LKHB1RF'W]NR(`@K)NX8
MVZTCZ(57F\5AU946>4_@:MNH!*XVD$R`68GK9?_#2B;-WW5TES].8'12N),K
MR!T@*-SIFA]$GBJ%34_R/WH/K6O/PK'+SNVY**N;,-WFZ29-XKRBAM&UY0!G
M,&Z)8AD8P5=7!I(C^"%4H_"OA;4,>>RTG:Z]^$`>"7V\LX8(_M@8XS];T^N:
M;4'X8_`Q[!CC7TWH0L>_M-CI29]GPTFW:24B:GT%\O-M[D6#E\E/A(MV[4#X
M_;7!F^.O%%X:M^5T(*?I%(>\)1RUNIR(WOQ75>S-S;2*JV2W+K;L'KWQZZ.%
M5!F_!,+`4(*3]M9N;1+$V].E:%"2'W-D_4E*FKKFP>!"@9WFC;:EI_FVJ>FC
MTJAQ2>_=TZ&^ODFB[?L!E`*-.XC*[A;8,$H
M&*FW;4S%1B7_$^%-5ARZB:S%YYZT&W2N.49M[T8=[.;Q.YVR241*_%Z,F<=(
MT$IL(@]Z=((M1PT_G%\4`NNZU[%=DU_AM$*BR*.H(7'48U:\Q]GYMYZ*9V;DH"(T++2[`J$QB^L)#&%H:0:@N#5."F!3A+CK%",PC=Q3AYPMI>SDA
M5EFFVWR/CE<.%$TB<0E+-[VJR*FYZU/]4E1^)?6.D@ZD[G<>A;'<9
M$C:=!Z_#"6Z'H:#.LIOZ0\AO.Q+S76+6Y==R^`E!EE]QTFUZ=GA(JV3'K'^A
M171T22>-7K5;SJ/0NL_SWN/#*L9'V'X2O7GN`#%T>Q?G.^V!0
MP61#HA#$>49[#]"\^W4A4`'5"_/T&H%3BDVAA+D4!_;B416CT5C6,FZ@-:;;
M;-)MC6,V%1[+F>"J",W+.(VO'885\<&!0:'WZM_V0(CB=?/"U#AA);[1RCJ.
MM(L*$JZR#NX&))I*ZT2@ZJ5M/"2"<8%;#==5EQ3_?4:GT:LI-N,6>P3J$FWJ
M#.SC!!?E:,2&AN`U9"^$[$-=^[8O/@_T"YW(?0[>5N2#\A!_T`^:+Q;^6O77
MA.0#E*_W3,P/`"]V9)N%`MO(]=?P&S8?,.BH_\U]<73M-U!+`P04````"`!K
M4C`=*-*(KEP```!\`0``#````%1%3$5#4D0Q+D524N7,,0J$,!`%T'[!._P3
M"'$;L0MJYS8J6(=DU!1)EAF%'%_/8&O_>(OAZ..&N1_Z=NQ4J:M(J!LB9P@F.S#&<`F;H0U,8[="_Z<[,T2%Y_77E_UZ+H`4$L#!!0````(`&U2
M,!TIRVCV9P```)`#```,````5$5,14-21#(N15)2Y`=_A,(
M6BW23=ILNEC!.9A7FR&)O*>0X^L9BEOVCV_2[*U?,*I.O89WF;>?'F6#)UIC
MF$1`<28R`J>C=;L#:[\0OH&Q_:Q@Y3"?+'!V2_:Z%Q=>50)7G<#U^.LZ`%!+
M`P04````"`!K4C`=#LVE_>8!``"G!```#````%1%3$5#4D0Q+DA%6%U47<[=
M*@Q\K]2]V,80\[T1".O?4L<&5[WW2(BM%_K&)M(EQ/6"C/>RZ;,2I$^P"CF(4.SJ3K3697MX*]R:4D@,M[(VHV07+40H4#`(#Y*$)>IX)13_A$5KQ+/U2RP[0:P^KAI,1.`Y+U@I
MRKRHU`U[%6BJ?_RGY
MY6D]0>\5[/XBVNUWIGU>(0PWL[\F5!X)1DXNM1[5&#[,"W:B8QUL`^D)M]*$
M?G,"L"KN?Z&1WKISW@K9];BRM0JBD1'Z8H&\Z-",GWX81%I7ODJ!7#$9?'@&A)XFF?MF0LQZM`5A0.=K:?$`^0M?';W&'GKO64L_WAK0H]QT=T2]/LB!:T790""9[MGB/U^EE)4M2AFJJT5G=%G
M`^A]/D=E(/"9B$:+*O]=[_EZZ'$=M8P8T?TP;?SY`U!+`P04````"`!M4C`=
MW996=LP!``!A!```#````%1%3$5#4D0R+DA%6%5469(K,0C[GZJY"^"E\?QY
M:9__2B-YR;R7*H=.A%ADZ!\Q61\5\YZ_OW[$\0NGOK!!WCI%HIMH/:#B?YOR
M>EA.K^$$(8A02G81&>-X,[P'S3G*HCCHT2Z(,T'V!#MALTCV`X;--#`4#@I0
M:[P@\XP@I<)V,!'>R@$CF04,Y$7"R"CO9<;=GR\3I<*QSGG`Q.JK-$/:PS9Y
M+K@HRK!64)XW"'#!?/IT!\[&P'RO"/D?IC;M=$CA@`]S-LC*-LJ2T#\Y'QR6
M>HI)WC1\1E#:KUFT_S,5B\TT?YF7.F`Y(1P`>!^7=K?@'/!-`EB1$R"BI
M'Y!Z)[!0KY?)KG`K5_CJNR"=N/>@(S7[:Z5QS%`&PT,$%B;MMM).SA46U94N
M,N_$=2HTJ#%"]Q6Z#+T@5>K($]1IX=CMAAV;V7ED!CZG>?L<+&3@J8>7\\,*
M[(*<_L*O)["8Q)Q^]^-=-X-M.VT^3"X6U:E7G7T)%_0M`-0QC@BM'.%U40/"4?"3-Z>]DZI'V[.3N]-H_Y^V
M-SCNSA&O[IV(MKU=F20$LY1BG$O@#)!*/#E[7#586'-R7BEM``@`:U(P'0-GLJ7L&```!'8```P```!414Q%0U)$,2Y,4U3%7>MWVS:R_YR<
MS?\P[?;<[)YKNP1)\=&M`"7GT:IG-XD(_#C`/#"8&4"7L_[B$BQR9MDPC[=QE,=K@.7X8CRMGA+OE(2A"T"L'TCX@TT`?V;]M^/R\:N7D\44_(!XL/BX6]UGZ2[=YW`9/Z39
M1QA&V1K&#_MM5*39JY>O7EY,AP#3P7_&PR4,IZ,Q@[J87(UA,;V>#\^6
MKUX"_-R_N![3'J#[6)954F1^:#?_6$Z6%_0MWQY-YK<=N$[SCXO)8LFFXM9$B\8>">P/S'G\;O.GJ[\&)R-;RX+H?];=EK/GY[-O[?ZZ[W$7@#'/_#![A,
M5EFZ2G=%EFZW<0:3W6J[7\=PGFSC[KF@#RUR?JX;4`G?M?]8$E(WF<1X7\'.\*M*L`]-EF+UC,'L:3$>'V6.8GA;3D3$]#::OP_08IJ_%
M]&5,7X-9?E1,G_;P16UI,7F'&K-L="1F0'L$>A[)F(&.1Y0A"F8(DZOES^.A
M'M.5Z/R^A)WLBCC;/TK(6G$C%IB'0DCYVM%DWCF4R6Z=9.5;N%S/XSOHK]=9
MG.?T[TE>TE&_`!NE\AL;YLNA,"KY!82]8!Y'6U@F#S$,M^GJ=QBF^YV`:JNH
M#LR&%]*7(JK-9RM+[[+HH4&[2)]@\+&(:UA'A75AL>POKQ=Z6(?!+HJHV*M#
M5UE*>G"^$&=6QU(VI8MX2Z<70XH*6T%Z,)O.EWT#9(^/.\T*Z,/D^ZF"**IK
MA>@SQ($!T6L1!UI$45DKQ(`ABBP7$?T6<:A%#%3$$/JCX?3*TB,&L@[WOQ_!
MD-MD)JM6#1PJP+95`L_'`KLEX%`+_#[.*+7S.-]O59ZIU-L$QN-17V2:B?K`
M+9O.YM-+&$5%I&!K!F"7'M%'F-*\I6A>M28S><7NEQ;RNK4Z(Q"R=P\X!^V#U8SB>+H_5CQ.Q:DNZ.T!3;
M8]A':XH96]49VV?81^N,&5LC?P'7'L$V/T-[2`=P"./Q<<"M\`G89RVX*MF.
MQ<$%VW]8LB5PV[PH.02FL^7$)']\49H^JA.L76`=&\R<=1RXE&1&Q]G+-"].
M%\G=+MDDJVA74/4QK]F."Q<=D!:#O(@C,Z9F1JCB7(]UF*2CEP>_2-93T\M2
M>_EPWK]8B"]KZ._H%<#55/Y2[J7G3=BQ*7$MS7+^KXWE_+NU7_J.I,.EM]N?S7SK9,XRR[&,WFUT')+?I.!R52:X+(T20*NRCY*[$.`:M5Z*9J>I$4_TX
MUX-??QM,E@8T[L?]&F?I`1@??NV8*CV,ZOZY`M'0`+838RTV0`^\<7C@;8?T$TP-(YOST+EK]-KTVMR4AI,`DL32;@.$S58^C9,)]91LQ>M3^IC,,LNFN\=HJ:$&)
M>27IN3"9SPZL),U6K7+RDMT=7PWKEYR9K1H-$)@?>A2=.VVBK;P]9"OI=MYH
MXWH!S`<3*1*@VKCY@+L^J_MH5PXB:?S"S3:Z,UNJ'MM1&[&YI2I;"([FN0"H
M6AG/@OG23"RW,FRS.WT?9YMM^M1NTD5DU59XA$Z#=O5M;44]#MM[%993R;#M&([,J3H"*J"N,Y=!:,B#W]+)PA7%5G/!?Z(S.NI[JIQ\'V8#P^
M#K;U(V^RI(AU^*I6>AZ\E>$U6OEVF]Y&6^T<:W7&\SLTT0NH<\K=5T$3`W)(
M$[VP0Q-]"V8+LQVL8EI9G*\B&NFD-M4RZYY/2C2S`20:-&)6/-\NT>2O==$>
M$S,#=H_3Q/[G8/L>Q!JYKFNS"7%4VC:4POJ%,>;6&\;LV^
M4=O\7ME'[V$C;:M0%^D^6V%<52U\C]F%T=LNM6CE5255U03?A_E@=MVM"=7^
M>+;?;D_WCP<5P0\Z%,$/2\`J,"0N2<$A10BL#D4(2(DI[@QUBB"'@K@7MWA*
MBM6]62<"FQJX`^M1"YS3S:=V_5`5)'!*Z+>2:Z0J"()>%%%V:%T*7!C^)%L%
M557DN1C>1[M=O%6<)%5A@AX%E^9)59A.<&*6[\"CDB&1KLHWFA$>>\:$JX(>
M^`S;E%+PC\36BV:7P`>-P!/)\A\4^-#J$/B0P&QX_M8T594/UK=.YWV'#FF3
MW.VSB,5&#JP"HS#OVM\SA:\UBNJ&B:F?+A1LX4Z-9+K9>BH*OF(0Q*]+'1I-D=Z)6![C8384CQYZ8H
MM-.%GV5I)L$KAH)8-!1H-IQB:JR%5RVGCN6D*VE-+)O&A]*'&/9YO-EOX2%:
M96E^=G;V%7;JSM^4MR=6ARX1FCJ^7K#X/QM\1\L>O'A(WS_1+.UR?#G[[::C
MK03KM8^0EYTM`W@1;Q;/W2TZ(@($F+!;#J#(X9+2#L$3E37
M$(C=#J'*,)K;.@BY"]?%;3NIZ!V:'.)U34Z[%(ZO1IU5%1T/NX(,EB=J,DUT
MS)*=Z(%?)'G1T;TKU&`%,)R/?AM>_(\F?LP_=(]MP7_#O._"CUSC^+IM!@T9
MZ$A([FE`^U8-QXSU=%\\[CM"K,1BH//%4A-5;RDE-2@K,#BAZ>W3_JI(WG?L
M5@EAT#?"/J6&]@5HOX9F1OJ4+P(G\%,BOD!?;&!WL)=ZS/
MQ&WXBR/C+-M.AS81UFAQE5CQW/U#E!4K.K+)Z`1*8F\_%G&=J"2:S+,'Y]>+
MX940QA1`"4]QG>^IY=_OJ&^QDBH7B)K7(CX,)DLC(L]K#9("`:FYV?+E%]/I
M3$02@7AN]B)-'U$U!5'3L80F\GX[O^B_U4+Q=*RT;`L+-E%985O,&!G\/L)9
ML8P?'M,LRC["HBC_O(OAG[4_3Y"?Q9/H%%+T;43(M0FRC@,0>6=>YMB)"Q"=*I(=4")MMAD(;"(++!D,L*TJT@;0V5;KT(Z"!M3.4-+*+W<9/BKV`U
ME/;JI50+JU+*UBP%6ZNF=LM7;*[^Z%Y=?QA%I!D4]TD.CUFZ*IM1/^GOZM[?_Q3'S]63]5$^+:)\+_/F^P-O6U^M'H:OK(PL:8]G;_#:XA_R^G!Z7O_044:(2_O>\`7V]'U=9\<\`3N@=74H+5]_
M[M(BI7].KJ349@GUG_W#(Y0/DUU2)-$V^9//6I;NBV37L:XZS&WZTGL.]^^J
M%78\9=IQ]6,;?FQGWH3FPXO'?7ZO>_J&&ZVLMJS56]KYM%\UVAOFSY7NP]36\9\&[^&!;KK0`LMJ'^K.*MMMJNB[[DRM1#^F3
MARC9\0P9W?L>%JL07CRFC]JG3.Z+-%,F+P!KK"PIZDP(NR+F*+,PY:&9:#9'
MK![-&GM_R]8;>,H:Y.3G14D^H>VQNQ:DKUY4\5OH\JZ4CM*;0IC^1D;5]F>>/*4LZ*2
MVBC=YAOV926Q31;\#?17U!0W;(?;:/<[$`Y*>*H.5Y@TXKG-GM:%.J@W,&2S
M\E1GYXOD(>;&E-C@6&/)]V9E)H)H;)^8L2>$T&B0];J"K))@&M+J+$X8%\7&N"I0T7@;UA7AY-,0O8=?47VW\XUKDD7JSV1$LI_324+N*"%<5"
M'Y99"1@5,5S0J8@K@GL\(([+411#@8H;!8(K^**&ERGW*.62SK(*%2/E1*%\
M8*#6#*!R;*`R`VEN)>R]K;U;.DV.*@(93`2#YZMBC%#!57
MKM=2S+YG0'T*A/C6M$*_9EEA"JK9X?#][S?:S]=XQR2$JX+NR#WO%B&M:U@^UA@NX53(IQFNMP`HPL9X%POQNGABQM["/$K@G#%&E)Y^-'#D==M%`*>[#:$TPDCH$(1-:/&%Q/1YU[!'5\G:6.$*VE
MJI2@1*?A*X;L\40IKCI19A,=!1%GLWS$H'QJ`Y!:>9YB`W1JQ9R!`JM5)4XX
ML%75F%"IGOU2\R^@,H=?+BU!E(=@TQZ<4F2!7==B?CR8CWJ5?I=]1
MZ0F>+'PF29@L.N^/S%JLZ8!O/[;3-P"KCSDAG/Q*=EP754Y,=JN,[J78HT?!
M%-E#"HDFQ;<52)4C#62'H;-'8`VPC/NMC*_CU2;_LY'QDS;Z.XHK]%K&][LB
MV4)2O&YX/@8[D!G/:E3P%K61@0;[;0K1;@UW<0$YS7T]T(EG"OH-1S[7F&>_
M]WGFV:%F%%L\WU/,:&6>FWQ@O?RIA5N-A78($*)`"\N)#-UD2E'(M"RFH1M\7%I-/,?H.-:"AA4"U/IK%W.#&NZR2M%(9WYK"`Q5`L*Y`B
MU)*]:.V#?'I(L`_5(W,1!>'VSNEIQ#BPH=Y5?YH8>T""`,F:\)+;8I.O1%D3
M0I[QZG=(-IHX.W5`&+@/=N`@9U.P=[5*2W$!/CF_)X\*=D*]NX?';4PM*<,/
M-#HH.+=F'>1'7#ELA"`R!#.4'"2W($
M]N6,3I8M.:F/X=3LH[MP79ZD1![J>!<>P;O)!G9I`2S%]W\T>G@;E6^B%OHI
M2D03S5XS`HN$:`""36D]"#G=HS6C+?%CC?,42@ZCP7GBFX@D9_Y3O*;Z25>2
M9B/AG&LV$H)+\?R-Q%!P=%T+K$#.ZO'2(>32J([NV[@PNL\ND86BKCE2:<;.
MN4`S>\30;(T9"C]S-74=(#VL;Z&@;_)FQZ1O374F"_$0!QOF4%4W;GU/FI+H
M-XW24F>P#I+QT(%+?7)A8UK7*BEB);>AY^6BNV0%5_N'VW+<_R2JWC%X3R=;
MTGI:\4D^9BCQB3UB:'Y);%_VU8B0M6J(C:).8FT#L8%*+!$R(,\D-@3B(A$E
M0F&8PO\V!/`A7NV+6$-@'XB/!(`(\?`:4A6`2HID_D=W4;+C_J0[4"TY$M/LF2NQI[2X3Z:K.]K8\SLTCZ-DT?O^FL8^)O&]%E'T^.WP3IZV6_FISF6(JX
M;B#OK02E'KP0E*KKF]0D$WN)+2T9[7)1-FI:,-AS<.18M*4X;$=[P'*>-Q?8L=-J855L)X7@:=.\JM>(XN`ZRJJV2)J.G<>1I4=5GR5[/
MH:$F)'M$->DL^'?2U@_Q4)-8(L2.TC-(EPJ8'!UDQ5K(KV11P).V>DCP*S/F
MHR4YT!,Y#+,'=B`$:'"-5RU?5U.I%*EQ24X@IVXEQ\WC/_;Q;L5M1<^CH00Y
MO$J$=;A>=]7P*EUWV;<_1]M]!48#S*$MGA_X[87JVD6$K9-Y[5KL;XLL6A7P7?F(I8X$\OI@V7)=28G:LBC?W[9C/;%T
MJ$])<<^@:3"M,2Z<2>P5`R`CRZ&LM]I7"'9\]R>T7+=51_3/.$M;TU()!T,>
M42\1R9.M";$AQ:1>(G.UTET,]U$.WY4MVA@C@QZK$4MB:V)LAHCE9K_=PGLF
M4@B81H61PT]LG:.$'7X>%=9YRYX%1#&'MM_,*'*5Q,6`R9AD7UM4G5D4XCN5
M6=0DWBZ3G!U!Z*]6=&N6Y/?Q^J1N7Z20Q[MUQ_4&A%>(L%BNJM6.U=B'9VFU
MY\C.&`=3_1U<*T?+31X_0E)0RJN'#(^%B^4M"G'4C02N2Y/P^,,O'SGQ_H+(
MB431@*&0<.IU%FN0TK.8S6<%/9(8^OB)Y/
M[1KF3D]KUXC>KE&HQEKR78X7``F9*6LL>HDJ*"^W9#"M]M&6CKRAM`\D4##%?8X),\W@+HNC(LY.H+B/=WQU+*'Y#C(JG_$W#,$:*HP2
M%)FO0!I&S5.6'N4/J+',B_@1LN3NGIMV;Z1##K\$\EB#+)9(?#HR]48MM.*Y
MFG5T(S91Y&S#P'P+K)Y"9DM0M%NW.G!"!+#^;EW1R/!NY!RT3V@<`>.J<01U
M^"*1K7+Y-CAC%$\A0A%%M%X;XBG]=3OF*H3B.VK^BMY;O4W%L(5\KQLD&KJ1IJ[BDJB_3H4S4^LU9R)061*RD:3HG>>>/4%;5?YW`\
M:J[D>O<23Q-*0"7Q2(S*QPS-IW*$^1-JY8AHY8@@P,92^:,&4"B2J"T574JG
MV%)E_**Q)*]<+V97\OMD4[#M*7]!'ZP1GL\>@1*-9H@@V[8*BN:3`?'O&_W<
MQANNGOZ`9JC03`@[JSI#IM<$.S^#&.BB;[!4F5H_)'0,Z5^7";":X#N6S<)^T%3<)^B7Z9;JJ9H1',RH'V
MQT#02>T26HV2J[L[[M[)1T!*O'.-NRC44GR:NQA8&G=1J*'X>NYB+^#N8D"`
MG.,M:R]L5LZ:!>V6E9]*$5C0'D&I8P])WNZ)`YNNTLB%%-P18?]Z,Y>4JG]+
M3Z$_,>#T,:XJEQ,F6/QP'TO:D"$F7RB24,E7=MSMX1R9;E='M_VEZ.Z!U<=;
M):%NHDF"*UNE)F---V/T<+X:^@X\S79)J*(X?KMTVDJJKY%_H7[B$^4_T,B_
M4$KQ]>2?W]W!@KFJ!^T%#5N?YT$'-#*`]TM"K47M0?,M46N)=1ZTL&T*!FJ&
MA,CU&(8,B4BDL*$.AAHZA1J,(^BLT!121T"&;`T-V\"%4(IQN^/>4ME]++IJ
M:`W=Q7<1/<)VPL2;?L/S/.P5YQK3+M1C/->TA[I(@.\V)'Z::(>Z2(!0?_'U
M1-OWX`4GP0;+#U"HQ_?K2A_J3C(NXSMZWW";6)WL^>8;OEB'#C@N#LH)U10E
M@5Q3/M!%A?5PRQ[HF`L12B6$'BYWN<->V0-[LT)A@=##XAH7>F4/(>[,>TAQ
MZ+H'J:CRRQY"M([WL'4][(JJH.PA;-)Y#T?7P^&.;AC2D2-O7_#^Q9'SF&+8
M+WO@2*60U1=ZE*V^?/##_PN"'^&@'*-@W?D8)6M?C[%LQ7H,RQY"$1#O(?E'
M=0^?^_#A2""9_)V
M\X_N?M<>_`Z@:JO1J&RXZ`?EY=-ZP$Y`?
MM:8-Y2MX#'?_TX;HQC#SJ^5K+PR_2$`;RC<6:1M:K*%\W;6V85@VQ(%7[7EL
MVA`?_S6^NEXM:-36L&HHY=E,O,8'^(WRB&.4AFJX5R_QA:[&5^-[9(T-<;V.4M#YV(8D&K]M`K1Y3K?:2ZXEMJC&*&RZ^TRD5/<^![DHUBAJ-[QE=C3U[[
MZH`WE/QHP[U2KU[BZP^-\H@CA<;!X&.SAE^UH`WEB@(MXH`W/,Q"MVHH7HIG
MY#6^6M2H"OB@IO;`WZAMV"'CK%Z!-91.RIH',Y_!49S!ARBT$T[KU?"]XT86
M'AAR?::Y;'@,(J417_YM?#4.HFJO#AS!E_:%PL_PA>"475V?[/;Q^GE^$2[.
MT-[[:4/=L,N`LLPU:RB%G0P7T;UZB0]/&C4`WRYGY!R^+*X#L7-V6D\+_WJ%
MMB$5;'Q5M]&5P#_.I'.VS\^KAG+M1T=#:>NB-G2:ABA_@1OZ=4/I!X_,$XZN
M.C`W1.<7#3<[\8;="EW93_P3,4:]Q[?2FFD\Y.,UTH/NDC5+#[HFUBP4Z-9X
M8T-\RW-7P\/+B\4:RE>N&N<17UYH1D0I%ZW]I#J#[TTW"@6^"]TH%+ATQ,A"
M?-.N<0G$5U6;:40W>QN%`E_':T3$OR1EY#6N2=&NOL.J8;?HLJ.YO"&^:T%I
M.*X:'C(`Y+QJ*%X6I/6JFX8W!QJR5Q^SGE,6XC/OQ@G'1\R-8H9_:L>H,_@G
M48SRB'_JP#@8?,NG$1%?V&F41WSSIE',\"^U&%[]A?TB8OTM?M&O<,0\T^G#
M/S]B;$C_NQQ?3N>_P/6"CNRR/X-_O7[W&GZ$ZYP&TN'U*?L'JV;\-X],6A;\
M`.].3T_?U9_R[_`.?0Y_\8H?9_GA$[IJL*H,\6&T4SA%'^4+BC6D6`=;'H-5
MW9W%*:/3]EEH-I^SYW?54M;?;B$M[N,,'KCLWM++(7/8,X:?<1%A%]K2Q/`/
M3'::B[!R_D7OUM``"#=0``#````%1%3$5#4D0R+DQ35-5=ZW/;-K;_G,SF?SCM=F[:N;9+\*UX
M^D$OI]IK6[J2W*3]TJ$ERN96%EV2BI/^]9<`^``.`,J.D^U<[6R2BN`/!\!Y
MX9P#Z&+67UR`14XL&^;Q-H[R>`VP')^/A_.1?4(?`O2.B7],>CT7@%AO2.^-
M[0'^S/IOQ^7C5R\GBRD$(?%A\6FWNLW27;K/X2*^2[-/,(RR-8SO]MNH2+-7
M+U^]/)\.`::#?XV'2QA.1V,&=3ZY',-B>C4?CDM*WB]?O03XI7]^-:9O@.YC
M618!,#^TF_]83I;GM)=O'TWFMQVX3O,?YY/%DDW#3[/)D/C#T#V"^4\_C]]W
MO.W"B\GE\/RJ'/:WY5OS\=N3\?]>=?5'X!0X_L>/<)&LLG25[HHLW6[C#":[
MU7:_CN$LV<;=@$MYSA2_C/_?\X4>RV91_UP24C>9Q'A?P2[PJ
MTJP#TV68(L<8,3T-IJ/#]!BFK\5T9$Q?@QGH,'V&&6@Q`QDST&"6'Q4SH&\$
M1(O)7Z@QRT:/Q`SI&Z%^C63,4+=&=$$4S!Y,+I>_C(=Z3%>B\\<2=K(KXFQ_
M+R%KV8U88!X*(66WH\F\M@0WSY5`8E=P!81W,XV@+R^0NAN$V7?T!PW2_$U!M%=6!V?!<^E)$M?EL9>E-
M%MTU:.?I`PP^%7$-ZZBP+BR6_>750@_K,-A%$15[=>CJDA(/SA;BS.J6E$WI
M(M[2Z<606,67D#[,IO-EWP#I\7&G60%]F/PX51!%<:T0`X8X,"#Z+>)`BR@*
M:X48,D1QR47$H$4<:A%#%;$'_=%P>FGI$4-9AOL_CF#(=3+C5:L&[BG`ME4"
MS\?"M`';Y0CF$1PR@Q38)K\A5%3P3L_[R9SU\I!6SGY.;6Q@D15[CBKQ5X;I4V0VG
MEWK4`^;`^6\\GBT?(Q8GHM27>/D!3;9]B/EA0SMBHS=L"P
M'RTS9FP-_X5<>@3=_`3I(1W`/1B/'P?<,I^`?=*"JYSM6!QMR2$PG2TG)O[C1FEZKTZPUL`Z-IA7UG'@0N(9WI'EQO$AN=LDF646[@HJ/
MV68[+IQW0%H,\CR.S)B:&:&"FKMMT*XG,I?RF_IUZ;7L2EQ+8TY_WYC.3^T^DO_(NEPJ5P;AOWY_-?.Y1E&6?:I
M>YE=!R2WZ7$XZB*Y+HP002JSCY*;$N,Q:%Z)9J:J$TWUXUP??OM],%D:T+@?
M]UNM?.%H@/T?B`98.N?7LV#Y^_3*M++<^7T7%:O;=7K#?/_CZ5Y24AI,`DN3"G@<
MINHQ>#;,9Y81TZOV)Y5RF$4WC;=NF5T%SRE!9=E1704M*#%;$L^%R7QVP)(T
M6[7*R4MV-]P:UIVJ..\$.:#B10)4'7<
M?,!=G]5MM"L'D31^X68;W9@UE<=VU$9LKJG*%H*C>28`JEK&MV"^-!/+M0S;
M[$X_Q-EFFSZTFW016=45/J'3H+6^K:ZHIV%X>]+BCG?1]38VBXQOTR$:D5UY
M$E1$56!\A\Z"$='3S\()PE5EQG>A/S+C^JJ;^CA8#\;CQ\&V?N2[+"EB';XJ
ME;X/;V5XC52^W:;7T58[QUJ9\8,.2?1#ZIQR]U60Q)`M5C&M+,Y7$8UT4IUJF64O("6:60$2#1HQ"UY@EVCRU[IHCXAFFX4M<$HT>:^K
M,MU$6ZSU885Q6+P&=Z8?2V2RQ:?E5)524A"&`^F%UU2T*U/Y[MM]OC_?U!00C"
M#D$(>B5@%1@235)X2!!"JT,00E)BBCM#G2#(H2#NQ2T>DF)U:Y:)T*8*[H`]
M:H%SNOG4V@]50$*GA'XKN4:J@"#H11%EA^Q2Z,+P9UDKJ*(BS\7P-MKMXJWB
M)*D"$WH47)HG56`ZP8F9OT.?"2VGC6[
M&#YL&)Y(FO\@P_>L#H;O$9@-S]Z:IJKRP?K6\;SOT"%MDIM]%K'8R`$KT+,9
MLFFBR*.0]0-R.J:IYY:P563J:=/D=4V3#_.._1Q*^E2.Q#R.UCR6*PJ:9J8"
M>"=G"G3V4NNE*.BJ>NB%)?K8J-+L#O1*07>KB5Z/XL]-46BG"S_+TDR"5Q0%
ML6@HT*PXQ=18"Z]J3MV2DZZD-;%L&A]*[V+8Y_%FOX6[:)6E^M4]Z>6!VR1&CJ^&K!XO]L\!TM/7AQEWYXH%G:Y?AB]ON[CK8^O,@?HGO:EB?<
MCKI:!PAYT=$VA!?Q;GW7T:(C(DB(!;/I#!XQ7$+:(7"BNH9`['8(58;1W-9!
MR%VX+F[;285W:'*(WS4YK2D<7XXZJRHZ'G8%&2Q?E&2:Z)@E.]$#/T_RHN/U
MKE"#%<)P/OI]>/X_FO@Q_]`]M@7_#?.^"S]QB>-VVPS:8Z`C(;FG`>U;-1Q3
MUM-]<;_O"+$2BX'.%TM-5+VEE-2@K,#@B*:WC_NK(OG0L5LEA$&_$_8I-70@
M0`XDAU$?V+UCRW:]QAGXG;K"^.C+-L.QW:
M1+#1HI58\=S]7905*SJRR>@(2F*O/Q5QG:@DFLRS#V=7B^&E$,840`E/<9WM
MJ>;?[ZAOL9(J%XB:UR(!#"9+(R+/:PV2`@&IN=FR\_/I="8BB4`\-WN>IO>H
MFH*HZ5A"$WF_GYWWWVJA>#I6,MN"P2;J4M@64T8&OX_PI5C&=_=I%F6?8%&4
M?]_$\,_:GR?(S^))=`HI^C8BY-H$6<M,$A#81#9F"#="M+64.G61D`':6,JW\$B^A`W*?X*5D.I5YM2+:Q"*;=9"K96
M3.T.(T(SW?4GS6ZJ#FU)MY["\#:YA\F(J\M7+]]%V2[9W;QINHX_KN)XG<-=
M]#&YV]]!Q@+#FS2#XC;)X3Y+5V4SZB?]/:^R\;!,8/L'S\37G_5#-2&N?23\
M_WF#M:FOS3M#!0`=Z]&5('4L_6()AN44;=RH,LR?/8Q`L8PL:8]G;_#:XA_R
M^G!Z7O_0T8V0R.S(]A(TN,;XL5*$E5_^_9!;$_;LFQ_^-F[]TML1]ZMO1Y[#
M(72!0L)$BQ"P;;J,K#"BX9!KJ)592([*/ZE\T6TZ_9.P;VSVC>-T,`?S-_[_
M:1^ZI7-=SP/?#P(@A%:JLA(/S>RX+IT%SZ-_^C[],PC:.0K=CMGQGCD[-MT'
M6K;L5K.B$@V=4ECC%,[*OFXY%W+WZXJY7\S5Z2"Y*Z_BA(HJP%6^I]S7/OY0
ME]RR38$=TA);7'52?6[2(J5_3RZE*H<2ZE_[NWLH'R8EY4FT3?[B"C1+]T6R
MZW"Q7:NKI(4H@\!EQ6U=\-MSRK3[V8BZ:
M?RD!`K8AM,9*4*E]11,G8!O%LA_LUACZ6?!7`K!IA0>NL:D_JVB[K:;KHC^Y
M%`T>J9!I<.+Y,*+^_1>^Y1Q49%FRN2%8(T57TV="2'M:"::J`,K]+3&'8ND!!]8#6=)VF-?J4D;`B[M8_5#]2>+BTT2(TPV/^63?;:#
M39;>M7/^7[#:QE'69OWU$]_E?+HZY].2I/>T2HQ$E3JCBHM**%OR$S:NLCWQ
MY2EGM4.UB%_G&_9EQ;%->M4*]%,E=S%43L<&QQHCC/4MDC>T#\Z(((33,:KVN(*OLM*)+=#6=1XO`,&2[+P=R&JRM/V5Z'UFX(V'59)=O8.]:9Q%ZL,D=+*?TTE"[B
M@E6;0Q^660D8%3&MI)7&QQT!Z4P)@_`I&+
M&2H^$E)S,?N>`?4I$%ZW4`'"IR%J(/X]0QI0)#R/DF`U2/(\MD@#CC0$Q[*D
MV`0K"L)K;:W%)A2).%6@J4AAE=Y_XG`CFCJ1`CNL$@@O,([R"`MM-*NL_$>A;H6IXPJ/6B1:+185\%W9ID2G`3J&?,93P;@,"!.*#[L(A-)'%,JV
MZ&(@DR!HO7HQ\*&&1BL7^!`#YSL;1U&;TI_A=$8+7ZM&JM[V!8[_'+UMVT!<
MN3B>U^\@4)Z//&I2B%P!-%E*E"9DH215//WP>>)INV"%"K$]<24W#XQ8^;S*
M*:
M5]_:LAB8U<Q6&1TA>\2G@RML.Z"02'8"6X%49:>!1+(S
M$]%#L`98&P4M_ZWCU2;_J]%&1VTF8A17Z+4VVN^*9`M)\;J1SA[8H2RBK%X*
M[Y$::6VPWZ80[=9P$Q>0TSSL'645IDJ_X@#$QE(2J):Q$NDF
M-UU;#+6(L)7J(1"B0`O:0H9NLO8H_#Y*\JINJH0<:11%\%Q%08U)ST*@DJ*H
MW1J+>8Z-0U85#$@EI0R1&1$I]R#IBU8_R.?"!/U0/3*7QQ"NYQV=?Q[:4&_K
M/HLI'`(D#-'*"9U<%YM\):Z<$,R.5W]`LM%D4*@)8.`VV*$0;*V+K["`2!M3
M/CE_)/<*=D(#(7?WVYAJ4H;O:#A:\*[,',T/+W/8"I-%>6N&=EP-0PO>UFMM.-I&#I49>1)#.WX0(9RZHL76PG+ES,Z61[LJ#Y@52\?W0;J,F`LIJ19.S4`
MI*[=9`.[M`"6O/TW#09=1V5/5-\]1(FH\%@W(5BDAP8@2&CK.M:9S&GN2#&IQ&'F]+M`5BAG*_E16'(D<')VU-X&Q>PT29L2]2AS!1U-9E*,W:/!)K9(X8VTJBAWC-M
MDS,&XF%YZZD^[`%Y:^IN2\0S(`Y6S#U5W+CV/6J*W4\;H:7AL3I*P_>NK@6.
MN%>MJ]`4MI+;T).0T4VR@LO]W74Y[G\25>X8/-'QEF2=JG62#Y!*Z\0>,30:
M)NG+GH^8`&J(C:).8FT#L8Y*+!%R6T\DU@7B(A8E0FQ<6?\&;?PQ7NV+6$.@
M!R1`#$"$@&P-J3)`Q47R^DM62AWFZ;WWW16J/'>0FKV\>0$392X-OO5Y#0'CD2[H?A"+O6'73F0(!K1-F?`
M.K$ED]&:B[)1TX+!]L&1@YE5N9OBM%F/=-K<@>JT$:&'ISAM)=I0.4?.ZNB$
M>#"-^G85T7$<7!Y25HU5U6%18].FHK0SCFWVQ
M^(M=DL`@SRB#R>$I5H:'_$H6ACIJZ\($OS)C/EJ2`SUK13$]FI/R$'\)U7LU
M?UU.I2*SQB4Y@IRZE1PWC__H0$$>2='!#MMK\!H^K8GQTZ)4#(E)G'D+%S#7?P1`W/4R".QK:=''CU7M5U$V+R:;==B?UUD
MT:J`[\I'+'!9MR'+HB@]:9$%][_Z"=K%MU?_\*\[25J-4//'EHR[^?R#JXH74G97+7XBM1N-Q
MC3QU9YE/2"-[,!Q:#<>K'B=GULU^NX4/C/<1MBW8FQ-9Y='AGP@.(.K?>&P!1]+8=-#R`?#K1:C%AD`Q!BZK3WT)-4Z6_-2FJ
MBR1GIV#ZJQ7=0R;Y;;P^JML7*>3Q;MUQPP;A14HE!2.-^G&L1I$]3?V,9:^1
M@ZF.&2[7I!5/]Y\@*2CEU4.&1R,MX>3:"`3'[:%/P!&3%1Q.(QIR&U9#&JWA'3PDQ2U\YW-#Z-M4G>&Q>EIU1B1U
MUBK)$JI1DM60'2`]ILJ"88LJB`+79#"M%4QQ>V/"3#.XR>*HB+,C*&[C'3>*)33?.$;E,]Y#`-9062A!++CAT2S4/&5I
M.?Z`JIZ\B.\A2VYNN?OEASKDWI=`[FF0:6')\Y&I$VHA0R=4I31\MA&;*'RV
MX6`#L#R%S):@:+=N9>"("&#]W;JBD>&]DW.?_I"&#S"N&CY0AR\2*0C7")PQ
M"J,0MQ6N:+TVA%'ZZW;,5>3$'ZOI-B*431Q*MZVIFUF7+PBY-_^,*D\+X?K*
MH-4,#56>%)4%>'09&I;IL:R>G,$G0KF%J*U$I[SQY8K:G7,X'E57\@&&$D\3
M04!G'!`;E8\9FDWY"*]/3\M'1,M'!`&VFBIL`#U+T534,$VQILKXS7%)7KE>
M3*_DM\FF8+M2WH$'U@C/IT>@1*-I%LBVK8"B^61`_/M&/K?QAHMGX-,T#YH)
MH=*B3O.H,\'2/.P0#I\/GN6A(^#`=%LN9%XXL*/L.>H!&-S0++Z/HZ))(4%2
M)7J"$,B9,A]N,\%U_):-^ZB]<4O8)M$OTTTU,S1P607?@QX0=/2^A%:#X^JF
MCCM+\IF>$J^O<;XTA15/<[Z"@<;Y$BHKOI[SY87<^0J&0,[P3M7K-9:S7H)V
MI\J/&0E+T)XIJD,.2=YNA8,1V"%6?(([(FQ;W\TEH>I?TVL%'AAP>A]7I>@)
M8ZQZGQ2,@0PQ^4*YA4J^LM%N3UO)=)_IZ+:_$-VA!58?;SR$ZHLFDZQL/)JT
M+]W:T-L6U(AW2#2;#Z$>X_&;C^.&4T-;P_^^*D]/X__0T?"_4+SQ]?B?7\;"
M3++J0?MALZQ/\Z!#&A#`NP^A%*/VH/D&H]7$.@]:V(2$OIH8(7(9AB$Q(A(I
M;$_#0$.G4,CP"#HK-(74$,B0V="P#5P(]0S7.^XME:^/15<-V=!=?!/1,XE'
MC+WI-SR]P[KH:U2[4-3P5-4>ZO;5@=N0^)FLK=M7"Z;TZ[%VX,.+KQ#J"?ZN
MH^Q")477"67"KY7YTL,.GSCLQ:\7@^DY+/N#MT"%4#=7:.&W#12<@/YW-&W8"\H/'M*%\(8WA)GS:$-V?9>Y:O@3"<#\_;2C?
MWZ-M:+&&\N7/VH:]LB&.`6E/)].&^#"LL6M\1:BY(;J`Q_`K"*QA]\+PH_EE
M0W0,WMPU.MK>V5`\>*UM.*P:2BD'TQ+B4^I&-L-Q&^U%4;1K?&NIL6M\6:JQ
M(2Y=,'(/OB79*(4X!]R)*%;*:4]VM&;"1S7#$P]@U]FZT78>\H>1;:,O**(WXCC\C/^+HB7$P^$"8X:<;:$,YN:I%
M'/"&AY?0K1J*-[\9UQK?GVD4!7QH2GOX)FP;=O`X2]VRAM*I-?-@YC-XU,K@
M.GKMA-/2'7RYMG$)#PRY/D)=-GP,(J41WW!M[!H'E@R7Y_&&G0H76%KE2_M"
MO6?X0G#,+G)/=OMX_32_".M8N>@6P<*_T2#MB%E;'P?M=&5P+]`I/.AS\ZJABH+&!I*L1>UH=,TQ/?6H(9!
MW5#Z51_SA*-#O.:&Z"R1X?HBWK!;H"O]B7\'Q2CW^.I5,XV'?+R&>]"%J6;N
M07>AFID"78UN;(BO,NYJ>-B\6*RA?*^H<1[Q#7UF1!2&UNI/NM;XMOXU,@9/3QB7$U\D:32"^C]E,([J^VL@4^,Y9(R+^N23C6N.LM];Z#JN&W:S+
MCL[QAOC;0-6=>/L>=T"?'Y4^.$X^.>
M1C;#OR=CE!G\NQ]&?L3W^1L'@Z^R-"+B6RF-_(BOES2R&?XY$F/7O\&A#^OZ
M"_M%Q/I;_"+\&QO&>:;_NQA?3.>_PM6"$GS1G\'WK]^_AI_@*J?!17A]S/Z#
MU4O]P,NN+`O>P/OCX^/W]:?\-[Q'G\-?5*7C;S[C50U6E3Q!:)2R8_0Y_`7%
M&E*LI[^JP:HNB.*4T6E[%IK-Y^SIK^HI(Y8P9\]#L\F7I*R_W4):W,89W'%A
MN:9W,^:P9ZQXPIF7W2=+TWAO&%=Y=!/G38M7+__Q?U!+
M`P04````"``SH"T=Z\G1\\0```"U`0``#````%1%3$5#05)$+DY%5'V0,:O"
M,!1&]T#^0T8=`KUIDG;5H%!L;:%]4!"18`<'!:E._GIS;WC0E^$1T@SGW"_Y
M>N+,0=@.5&8Y4TH\]YS%=>8,L?H7_X3IOJVAY*RK'%A7ZD0(\U7?%B6$@/[A
MY_?5SY/H_/3Z*XXAJ:EK'0XMFMM'C'+P]X6SXNRX&RY9E@'&2HVW2X,-Y`8?
MBM_UTE/D*?*@2&!.T$08LW2B:%)L5/($&H(%P:BDAB6C));>'N?`8&]YH`[;
M1(F#^-O&WX)1^0)02P,$%`````@`ET`N'45;^#19!0``/@T```P```!414Q%
M0T%21"Y00T)]EDUL$T<4Q\=Q`B8RWIDE+16BE=M#A%8">9?%F`]5@7RHII!8
M2M@M43H`I!#S2TE@A6YZWC]1L;:FED^?=_[\V;F3?C=_8L.44V]QZ83,W8N9V)
MPMPMG-O=O("S\^/_F?CR](M.#]Z5+?NR7X]AO$3]XQB$(F/DH52M.I0CJ<2*6+
MQ$=(@,0GQO;&]"CY@?X[6U+7P$DGFT@B/JA'!V,FF&\@$V-'
M]1BYSE;Y,GV2?J;>M03V[Q3&)W42)&;X6.9<^.3.R52V87_LZ%%3)QFZRJM*
M@3^@J[9(W;]#V`_J0C:,<'X$+#>2P4'=B$2)H:SR[T/O\PW4MKJ;IL8+3!WK
M^Y!N;:#[[!Y"NOM`[?J&5'N(S_=/*)!W=Z/[)=)%3-(U27X76^.;8JE98;7.
M=WN\3C$W/#XG<=WC48GO0?%_+;1X%,7'?"^*CWD,Q6_RE\4.Z!'2M8TD0+BA
M7K<(K-1UV(?X`&]PUT'WA++GX`J&)R2E2#'DT(RTGJIG+\VPVQ,T>0;3$VI,
M$O9X@B,+44^HR$)K\BE9:&4;87@549047L4>E!/F)DH)\]TH(\P-E!#F.LH'
M\T.D:X:,`,_0WT2>_G7^-N*KO,6%_0`9``X70M(B[H064T7Q7#O1HN&5&&!!E"9(>R7Y#]$HD($I%(OR#]B$#A3[%$$9-$L2:1
M&@O/R@2N19V>E\CYHJ9BHJGA69G`I9FCBQ)9+"953)+"2R9PI:+TOD3N%\LJ
M)F7AU4YNYH#BR-_EDA+1U/F<)I$:F\_!:O%N:+.-QP>3K!AX%4Z^\>"T2"4/
M%).I/%"9K(C1(KM]A4B4*>-&FN27\2O(Q2316'SGEOG35)AHU:%?8ULZA3(*")?TNL6T!9QQ/^.
MPQ80^80"P9$U];8%>>/S&K>3:AF1-35KK:D:(O!::&H$14ZJ1WA2K:/(:T('
M3^P%1/8:M]?$P%Y:&RFK%^S8E@M2AG4>VX+G@E_M-A]DDNI;TGF5[1J[E,'Y
M7!/G]3,BL.ZD.'MY]K)$H%HMWJKRN(/`N]%.*@R_)!6V_\,*NX$B5]@?-E"\]EN\)E7"`PKD%MK#![2:!BH3
MAU73>!5`CDB5.<`K;$XB1K8EU_
M(M+/3+LBQ3$4TP:*B6,!Q;NQF*ZQ:%N&0'&&9A9.$<]^(ROO?(UI67BY<$69
M64V\=[BBS&Q2(O"NP"O9(I'@9&FF;[+4(C-]#Z=E$@D^G`8[F8"=2P*OB>9T
MU_CPR-#P!#E(2##030\6ZTJT>)ZZ'6I@NV@*=TV>2@PWY"B]DH]0:&#OY#OD
MWD"MJLHR?X/NL\#@%?=?WI4^HV?X`"WPS^D2[_05R1&EWWH:>MTZI[A-;WON1#G#
MG[H]\1+O7@]]J"']&+HCVN45_BBTW>J0OA7M\8+U*/27U?.\H'$Q)W3/7[CR
M[TQ0`+=Q.ULMK(GZ3J%$>);68@+B8$DUG:5;K=T=URQKHK1
ME,0XH:SP$XIJ77;'BN?5`]*"=4*Y*S",!>L_4$L#!!0````(`/92,!W$D[.D
M0PD``"#(!0`,````5$5,14-!4D0N4%).[=V_:B-''`?P75RH":<'D$%="E?.
M'80+!)L+^`72I$^=PAQ7.EB0%].CZ!%4JC#:Z(]]EG=G[;E!N_9Z/M]"K&3D
MXE,,W]%J?II<37[^Y^.O7S:/OUQ-SKY].C__M=%L=-:OBO843IPZMG#AQXL2)$R=.G#C]D%/+-WTX<>+4H5/SE6U&G#AQXL2)$R=.G#AQXL1I<$Z-
M/?"+$B1,G3IPX<>(T1*?R8`^\Y,2)4S].\\.G
MG#AQXL2)$R=.G#AQXL1IN$XGNSWP7<&)$Z<>G6;;RU-.G#AQXL2)$R=.G#AQ
M>MM.FQW>?U6U'E?5ZK*J%IPX<>+$B1,G3IPX<>+$B1,G3F&G_9WB-2=.G#AQ
MXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)TXP3)TZ<.''BQ(D3)TZ<
M.''BQ(D3)TZ<.+V_>3VA<.+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$
MB1.GMQU.G#AQ&K+3M'J2!2=.G+IW.GWZEP4G3IPX<>+$B1,G3IPXO?%S0`M.
MG#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
MG#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXI3E?-]R;E[/-2=.G#AQ
MXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G%X_G#AQXL2)$R=.G#AQXL2)$R=.
MG#AQXL2)$Z>FTZAZS+S@Q(E3+T[-MRPX<>+4N]/!BL6)$R=.G#AQXL2)$R=.
MG(;C-*[:PXD3IVZ+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G
M3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G
M3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G
M3IPX<>+$J1E.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
MG#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
MG#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
MG#AQXL2)T_'#B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$
MB1,G3KDY/1].G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
MG#AQXL2)$R=.G)X/)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''B
MQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''B
MQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''B
MQ(D3)TZ<.''BQ.GXX<2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
MG#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
MG#AQXL2)$R=.G#C%AQ,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX
M<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX
M<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX
M<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX
M<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX
M<>+$B1,G3IPX<7K-<.+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G
M3IPX<>+$B1,G3IPX<>K;:MAE.$T[RXX!1R.JEV6>Z=-JOXE-/+3N4RI4#EY[19Q1,*5!9.L_N+O=--2H'*
MT.DBI4!EZ#1-*5`9.HU3"E2&3DD%*D.GI`*5H5.94J`R=$HJ4#DZI12H')U2
M"E2.3BD%*D>GE`*5B=-^)WSOE%*@M4%DZ)12H+)T2"E263@D%*DNGA`*5I=.V0%6-W'&J.96;`L7I9:=M@>(4X11<
MQ4\YU9U^YQ3E%"3AQ(D3)TZ<.!6<.''BQ(D3)TZ<.''BQ(D3IW?GM"[O3E:C
MY7@QG5_.;HOUCFU[.VK[?8/M/:G=`R=.G#AQXL2)$Z<7G1Z^T\.)$R?K$R=.
MG+)V.N$4Y33B%.4TYA3E-.44Y71Y[^3S\>>=_N44Y?3TL"*G%J=RR2G&J7:8
MFE.+4^UP/J?O]X.WUX]S_VO#'CBU.-6&AW!J<;K@%.5TPRG*J3;K@5/8J5QR
MBG&JSZ+A%':JSS;B%':JS\KB%':JSU[C%':JU2=.+4ZU^L2IQ:D^*HM3T*E<
M@4V/2**>@
MTY+3"TXMX<2)$R=.G(;N]'`^8\Z)$Z?>G(K'.0^<.''BQ(E39DZE\P@_Y.0<
M$"=.G#B];:>'7?""$R=.?3E]S]ZI"H03)TZ=.AT\MSYQXL2)$Z?!AA.G5W;R
M^7C3Z;&#S]UOX<2I'Z>#Q>G@FA,G3IPX<>+$B1,G3IPX#<^+$J??U
MZ0,G3IPX<>+$B1,G3IPX<>+TWIT:OP?$B1,G3IPX<>+$B1,G3IPX<>+$B1,G
M3IPX<>+$B1,G3@.X'_SD=TDX<>+$B1,G3IPX<>+$B1,G3IPX<>K$R;Q#3IQZ
M=VI](R=.G#AQXL2IX,2)4[)3U9H[3IPX=>.4&DZ<.''BQ(D3)TZ<.''BQ(G3
MD,.)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQ
MXL2)$R=.G#AQXL2I4Z?;ZJA9%>\MG#AUX%0()TZ<.''B))PX<>+$B1,GX<2I
MB_PT.?OZQ^3J?U!+`P04````"`"*=B\=14[.>F0%``#,%P``#````%1%3$5#
M05)$+E,P,9682V_<-A#'[P;\'8B]-^'P)0DY!(JLV&KL]6)7Z[B]%(9K-#DD
M*=Q>TD]?OF;T('>UBP4$:H?DC\/Y#TGQ7?_T_:\?O^R>O[Q\>_KWZS-[@#>"
MO[#=R^O7EW]8UUU>]/7Z^OZ/77/3WM5]US"PO_KR8G?3MCWC]@=@*LE*84IF
M[/_=[RV34&@&7`.K5%4QK:MB^._RHN[[+5M=M;MFVVWZ[GZ]8F#8JMO=%Z4M
M['Y^?_[RAMV]?/OQ^I,U3Z]_KCS5P?CEQ:_[=<.DX)QIX/BNM'T79GB7,[NO
M+^E=BUE]Y=Z5>]_4VYY)X^I7]J%D91^%==%VIX,OWNTPGC`R].FAOMVW*U:Q
ME6)W-_]-QAUJ//;UK:^0L[T_9+%SU5VOZ_Y^ZVL\PLH.R8W0N>U^$FOVOVW"
M``+(UU+EO%8TSEB;;AV[=;/GIR24R-G)H-;UG44!9ZO[7>-')&(#&T0/LQW:
MD=O6JT_6K$MGMG5`E&2/0"`@G`@4"(0LL$8@C(';MNEK9'+$:0>.D6_75U$"
M/OI!![;(0%>2F8)K)HMC$H@J3F=W9O:!-EYVQ3P\^_<3>PDS^TP.>SL7Q@E:
M)CV1'(CKW0(S5'1!"+[Z^3=8$DM!^+C?M:X_$1ND00!K+DIGGD<]`#D!7:E8
M`CYL-LCC69Y$'L_R1(D\7UKD7:^O(L_73WDJ\D29YQGBF9/\:QKDF2Q/(\_D
MYU/0?+H2+/&NZK[&"159H,`)%7D'*8"^M*B8[:Y'!_,!+-'!`P$D!WUID=?<
M?D)>WK\">0?\HXP0)V7$YRWYET\(@[Q)0L15*62F4YHI<.E)5B6)&QF34+E%
M3`*3%;A%[-BJ-%LQW'(MM8Y+GU'C)6/8PX1@?W_$BHY;F>S:TM0;K.4>OCNW
MS6\;ZT19Q#U!:`9*LD*Y4=UVZ]8VD=8HK"&49*'#O$:K$=%3@SZ/K30/H2T?
M;6)#`UF-FAX/W@?G0XD[F(I.#+%S]K##B3C!$3:,1`RP!:74#C;9+BM[1+R2@!4@BI)">(<)8AQ@$]2`C])"3*K!#BF!$Y*@(P2@)0`&24`*0%2)0`I
M`M=>Y//8_NW7+B%B[IY9R5Q@"+FAUJ^F-@B3'R)7]>5TPN["A96GG"+A*
M3B#<5;!3I]R.,C]V!EYQ!D_'(_5!'IZ#$YXAGCF#Y\Z1YAC/'8--CJ>)I\_@
M%:O8\A!/N@HYGB*>0EZQQ/,'GM#R$,\%6.5XM+K[D@KG@05>_&R0QX`NPC('
M%`04^(`3@$X0XAC0A5CD@+1J^=*)$:R=X.$8SX48MO!)7+5_R7T'*QG!!H1(SWG57B#FNBODNW'`4GR<\QX0_%2M&E\Z%0>8[WE<$;,]Q6G"Z3-P_&VW[C'E\T@3$SY%*D+25VRQA/2?5+%E%J=C
MOJMF/)YG(@)G^(XX?@9.($9G\=!S/<)+G[B#"<55>%J,_[$Z=O'GKFQTF7@Y!:P
M<#H%&.XN/G?;-L;'D/;]K=[<@C%$BTX^)Q,+95*T^$.=\)X/MXG!4B679A/+
MY'8+.;1MC>XJAU$/CU%OHXT`XD(VL0QW=X-%3[],\A:\,\#>:`L/I=&,XGOX
M7AA9Z$9UN/$8>RKT.',32VBMIQQ!-Y#A9G88]MC;VIY`(@M:@HD[%V_"-O(56-+(.J@L^CL:FI930V,9FW$(7_`5!+`0(4`!0`
M```(``Q2,!V^G@!LQ@@``.P@```,``````````$`(`````````!414Q%0U)$
M,2Y!4TU02P$"%``4````"`!*4C`=CCHX#\L(``#X'P``#``````````!`"``
M``#P"```5$5,14-21#(N05--4$L!`A0`%`````@`FT0N'<0;&V`*!0``/!<`
M``P``````````0`@````Y1$``%1%3$5#05)$+D(P,5!+`0(4`!0````(`*)$
M+AW[.7CW$P4````@```,````````````(````!D7``!414Q%0T%21"Y#35!0
M2P$"%``4````"`!K4C`=UE#(="T(````'```#````````````"````!6'```
M5$5,14-21#$N0T]$4$L!`A0`%`````@`;5(P'=:1HM```````@````K20``%1%3$5#4D0R+D-/1%!+`0(4`!0````(`$!#'!UNJ^N<
MP`0``&(3```*``````````$`(````,PL``!024-214M``@`:U(P'2C2B*Y<````?`$```P``````````0`@````M#$``%1%3$5#4D0Q
M+D524E!+`0(4`!0````(`&U2,!TIRVCV9P```)`#```,``````````$`(```
M`#HR``!414Q%0U)$,BY%4E)02P$"%``4````"`!K4C`=#LVE_>8!``"G!```
M#``````````!`"````#+,@``5$5,14-21#$N2$584$L!`A0`%`````@`;5(P
M'=V65G;,`0``800```P``````````0`@````VS0``%1%3$5#4D0R+DA%6%!+
M`0(4`!0````(`&M2,!T#9[*E[!@```1V```,``````````$`(````-$V``!4
M14Q%0U)$,2Y,4U102P$"%``4````"`!M4C`=SK(OU808``"#=0``#```````
M```!`"````#G3P``5$5,14-21#(N3%-44$L!`A0`%`````@`,Z`M'>O)T?/$
M````M0$```P``````````0`@````E6@``%1%3$5#05)$+DY%5%!+`0(4`!0`
M```(`)=`+AU%6_@T604``#X-```,````````````(````(-I``!414Q%0T%2
M1"Y00T)02P$"%``4````"`#V4C`=Q).SI$,)```@R`4`#````````````"``
M```&;P``5$5,14-!4D0N4%).4$L!`A0`%`````@`BG8O'45.SGID!0``S!<`
M``P``````````0`@````(```!?@``````
`
end
sum -r/size 61640/45861 section (from "begin" to "end")
sum -r/size 58373/33263 entire input file

========================================================================


b) standardowy program do odczytu karty na PC
(Zrodlo w Pascalu - nie dziala dla kart OSD)

Wystarczy zbudowac sobie taki czytnik jak w Sekcji III i uzyc tego
programu (najpierw trzeba oczywiscie skompilowac ;)).

******************************* cut here *******************************

USES crt,dos;
CONST port_address=$378; (* wybierz port drukarki 1 *)
TYPE string8=string[8];
string2=string[2];

VAR reg : registers;
i,j : integer;
Data : array[1..32] of byte;
car : char;
byte_number : integer;
displaying : char;

{ PROCEDURE Send(b:byte); - wyslij bajt do wybranego portu drukarki }

PROCEDURE Send(b:byte);
BEGIN port[port_address]:=b;
END;

{ FUNCTION Get:byte; - pobierz bajt ze stanu rejestru wybranego portu }

FUNCTION Get:byte;
BEGIN get:=port[port_address+1];
END;

{ FUNCTION dec2hexa_one(decimal_value):hexa_character_representation; }
{ konwersja liczby o dlugosci 4 bitow na wartosc szesnastkowa }

FUNCTION dec2hexa(value:byte):char;
BEGIN case value of
0..9 : dec2hexa:=chr(value+$30);
10..15 : dec2hexa:=chr(value+$37);
END;
END;

{ FUNCTION d2h(decimal_byte):string2; }
{ konwersja wartosci dziesiatkowej bajtu na wartosc szesnastkowa. }

FUNCTION d2h(value:byte):string2;
BEGIN d2h:=dec2hexa(value div $10) + dec2hexa(value and $0F);
END;

{ FUNCTION Binary(byte):string8; konwersja bajtu na binarna wartosc }

FUNCTION Binary( b : byte):string8;
VAR weigth : byte;
s : string8;
BEGIN weigth:=$80;
s:='';
while (weigth > 0) do
BEGIN if ((b and weigth) = weigth) then s:=s+'1'
else s:=s+'0';
weigth:=weigth div $02;
END;
Binary:=s;
END;

FUNCTION Units:byte;
VAR u, i : integer;
s : string8;
BEGIN u:=0;
i:=13;
while (Data[i] = $FF) do
BEGIN u:=u+8;
i:=i+1;
END;
s:=Binary(Data[i]);
while(s[1]='1') do
BEGIN inc(u);
s:=copy(s,2,length(s));
END;
units:=u;
END;

FUNCTION Octal_Unit_Count:LongInt;
FUNCTION BitCount( Data : integer ):integer;
VAR i : integer;
BEGIN i:=0;
while ((Data and $01)=$01) do
BEGIN Data:=Data div 2;
inc(i);
END;
BitCount:=i;
END;
BEGIN Octal_Unit_Count:= 4096*BitCount(Data[9])+512*BitCount(Data[10])
+64*BitCount(Data[11])+8*BitCount(Data[12])
+BitCount(Data[13]);
END;

PROCEDURE Card_Type;
BEGIN case Data[2] of
$03: BEGIN write('Telecard - France - ');
case Data[12] of
$13: write('120 Units - ',units-130,' Units left');
$06: write('50 Units - ',units-60,' Units left');
$15: write('40 Units - ',units-40,' Units left');
END;
END;
$2F:write('Telecard - Germany - ', Octal_Unit_Count, ' Pfennigs left');
$37:write('Telecard - Neitherland - ',Octal_Unit_Count,' Cents left');
$3B:write('Telecard - Greece - ', Octal_Unit_Count, ' Units left');
$83:BEGIN write('Telecard');
case Data[12] of
$1E: write(' - Sweden');
$30: write(' - Norway');
$33: write(' - Andorra');
$3C: write(' - Ireland');
$47: write(' - Portugal');
$55: write(' - Czech Republic');
$5F: write(' - Gabon');
$65: write(' - Finland');
END;
if (Data[12] in [$30,$33,$3C,$47,$55,$65]) then
BEGIN case ((Data[3] and $0F)*$100+Data[4]) of
$012: write (' - 10 Units - ',units-12,' Units left');
$024: write (' - 22 Units - ',units-24,' Units left');
$027: write (' - 25 Units - ',units-27,' Units left');
$032: write (' - 30 Units - ',units-32,' Units left');
$052: write (' - 50 Units - ',units-52,' Units left');
$067: write (' - 65 Units - ',units-62,' Units left');
$070: write (' - 70 Units - ',units-70,' Units left');
$102: write (' - 100 Units - ',units-102,' Units left');
$152: write (' - 150 Units - ',units-152,' Units left');
END;
END;
{ write(' - N0 ',Data[5]*$100+Data[6]);}
END;
END;
END;

PROCEDURE waiting;
BEGIN send($00);
write('Enter a card in the reader and press a key ...');
repeat until keypressed;
gotoxy(1, wherey);
clreol;
END;

PROCEDURE Full_Displaying;
BEGIN writeln('Memory dump:');
for i:=1 to 80 do write('-');
for i:=1 to (byte_number div 6 + 1) do
BEGIN for j:=1 to 6 do
if j+6*(i-1) <= byte_number then write(binary(Data[j+6*(i-1)]):9)
else write(' ');
write(' ');
for j:=1 to 6 do
if j+6*(i-1) <= byte_number then write(d2h(Data[j+6*(i-1)]),' ');
writeln;
END;
for i:=1 to 80 do write('-');
Card_Type;
writeln;
END;

PROCEDURE Short_Displaying;
VAR j : integer;
BEGIN for j:=1 to byte_number do
BEGIN write(d2h(Data[j]),' ');
END;
writeln;
END;

PROCEDURE Reading;
VAR i, j : integer;
Value : byte;
BEGIN send($FE);
send($F8);
for i:=1 to 32 do
BEGIN Value:=0;
for j:=1 to 8 do
BEGIN Value:=Value*$02 + ((get and $08) div $08);
send($FB);
delay(1);
send($F8);
END;
Data[i]:=Value;
END;
case displaying of
'F':full_displaying;
'S':short_displaying;
END;
END;

PROCEDURE writting;
VAR i,n:integer;
car:char;
BEGIN write('Which bit do you want to set to "1" : ');
readln(n);
waiting;
car:=readkey;
send($FA);
send($F8);
for i:=1 to n do
BEGIN send($F9);
if i=n then
BEGIN send($FD);
delay(20);
send($FF);
delay(20);
END;
send($FB);
END;
reading;
END;

PROCEDURE Saving;
VAR filename : string;
f : text;
i : word;
BEGIN write('Enter the filename: ');
readln(filename);
assign(f, filename);
rewrite(f);
writeln(f,'Memory dump:');
for i:=1 to 80 do write(f,'-');
for i:=1 to (byte_number div 6 + 1) do
BEGIN for j:=1 to 6 do
if j+6*(i-1) <= byte_number then write(f,binary(Data[j+6*(i-1)]):9)
else write(f,' ');
write(f,' ');
for j:=1 to 6 do
if j+6*(i-1) <= byte_number then write(f,d2h(Data[j+6*(i-1)]),' ');
writeln(f);
END;
for i:=1 to 80 do write(f,'-');
close(f);
END;

PROCEDURE initialize;
VAR i : integer;
BEGIN byte_number:=32;
displaying:='F';
clrscr;
writeln(' 1 - to dump a 256 bits card');
writeln(' 2 - to dump a 128 bits card');
writeln(' F - to display in full format');
window(41,1,80,25);
writeln(' S - to display in short format');
writeln(' F2 - to save in a file');
writeln(' Q - to exit the program');
window(1,4,80,25);
for i:=1 to 80 do write('=');
window(1,5,80,25);
END;

BEGIN initialize;
repeat waiting;
car:=upcase(readkey);
case car of
'W':writting;
'Q':;
'1':byte_number:=32;
'2':byte_number:=16;
'F','S':displaying:=car;
#00: BEGIN car:=readkey;
if car=#60 then saving;
END;
else reading;
END;
until car='Q';
END.

******************************* cut here *******************************

[ 4. Linki zwiazane z tematem i bibliografia]
============================================

No dobra. Poniewaz tematu na pewno nie wyczerpalem, a jedynie liznalem
(bez skojarzen), przedstawiam kilkanascie linkow do stron, ktore warto
obejrzec aby poglebic swoja wiedze na temat kart chipowych (i nie tylko
ich). Oprocz informacji znajdziecie tam programy, zdjecia, schematy, i
inne. Wiekszosc z nich jest po angielsku, chociaz zdarzaja sie tez inne
wersje jezykowe.

a) http://members.tripod.com/telecardnews/index.html

(The #1 News site for telecard security, emulation, hacking, programs,
cloning, piracy, smartcards). Jak wskazuje na to nazwa, zbior roznego
rodzaju stuffu przydatnego do "dzialania" z kartami chipowymi. Ale poza
tym takze wiele innych rzeczy. Naprawde profesjonalna strona. Moim
zdaniem najlepsza.

b) http://fearwall.lt.tula.net/ - w tym -
http://fearwall.lt.tula.net/isocard.html

(Syrius Dire Service Information Site - w tym ISO 7816-2 card emulator).
Warte odwiedzenia miejsce gdzie miesci sie wiele przydatnymi informacji
o kartach chipowych i nie tylko. Istnieje tam mozliwosc wyszukiwania
nowych dokumentow (takze oficjalnych) dotyczacych tego tematu.

c) http://cuba.xs4all.nl/hip/intro.html

(Hacking in Progress). Bardzo dobra strona z praktycznymi informacjami
typu jak zrobic wlasna karte. Poza tym inne sprawy zwiazane z grupa HiP.

d) http://perso.wanadoo.fr/telecard/
(Telecard Mapping Home Page). Jak sama nazwa wskazuje. Rowniez dobra
strona szczegolnie dla tych co maja jakies wieksze pojecie o elektronice
- czyli niestety nie dla mnie ;)

e) http://www.phrack.com
(Phrack Magazine). Ten link powinien znac kazdy szanujacy sie phreaker.
O kartach chipowych jest mowa w numerach 48-10 i 48-11. Polecam. Kanal
#phrack na Efnecie jest oficjalnym kanalem tego magazynu.

f) http://www.ccc.de/
(Chaos Computer Club). Znana grupa hpac. Osatnio zajmuja sie glownie
roznymi kartami (w tym kartami chipowymi). Oficjalny kanal to #ccc na
Efnecie, niestety najczesciej +i. Minusem strony jest to ze wiekszosc
rzeczy jest po niemiecku (czesc po angielsku).

g) http://surf.to/telecracks
(The Telecard Crackers Club). Sama nazwa wskazuje na specjalizacje tej
grupy. Umiescilem ja pod koniec linkow, gdyz mimo wymownej nazwy, jakosc
materialow zaliczlbym raczej do drugiej kategorii. Ale zobaczyc mozna ;)

h) http://www.infowar.com/class_2/class2_091197a.html-ssi
(Documents, newsgroups and descriptions). W miare przejrzyste i ciekawe
informacje dotyczace wielu dziedzin, w przewazajacej (!) wiekszosci kart
chipowych i innych. Pare rzeczy stamtad moze sie przydac.

Linkow do stron zwiazanych z zagadnieniem tego FAQu jest o wiele wiecej,
ale nie mialo sensu wymieniac wiecej niz 10. Zreszta wiele informacji
zwykle sie pokrywa. Korzystajac z wyzej wymienionych stron i linkow od
nich trafic mozna do wszystkich miejsc zajmujacych sie kartami chipowymi
i wieloma innymi.

[ 5. Na koniec (podziekowania, etc...) ]
======================================

No i koniec ;) Nie wiem jak przyjmiecie ten faq. Jesli sie spodoba to
bede zadowolony. Jesli nie to w leb sobie przeciez nie strzele ;) Mimo
to mam nadzieje, ze do czegos sie przyda. Jesli macie jakiekolwiek
komentarze, pytania (tylko rozsadne) czy uwagi lub nawet pretensje to
slijcie na adres: asturn@polbox.com lub szukajcie mnie czasem na IRC
na kanalach #warszawa (Ircnet), i #phreak, #phreakers oraz #cc (Efnet).
Moj nickname to zwykle as7urn lub asturn.

Teraz czas na podziekowania. No na razie nie mam komu dziekowac ;) ale
moge powiedziec, ze bardzo mi sie podobalo kilka faqow, ktore do tej
pory czytalem. Wymieniam tu: Faq Hrabiego - dotychczas najlepszy tekst
phreakerski w Polsce; faq Twittera - kompendium wiedzy o phreaku, dla
poczatkujacych jak znalazl; faqi Viedzmina, grupy Lunarshake a takze z
innych dziedzin (hack) Spacemana, P0wera i Lcumtufa oraz HellFire. Na
pewno sa warte polecenia. Szczegolnie polecam takze "Phreak Zone"
Hrabiego http://hack.zone.to/hrabia - po prostu esencja ;)

O planach na przyszlosc nie pisze bo na razie nic mi sie nie chce ;)

Sorry jesli mi sie cos pomerdalo w srodku w sensie formy. Praca z tak
dlugim tekstem (nawet jesli wiekszosc to zrodla, itp.) jest trudna.

as7urn
asturn@polbox.com



Wyszukiwarka

Podobne podstrony:
G88 Chip Cutting Drill Cycle with Redraw
11 Hitachi Mu Chip najmniejszy na świecie chip RFID
Mrs Fields Lemon Chocolate Chip Buttons
Box Chip Box
1 Chip LCD Interface
chip 2
Single Chip VLSI realization of a neural net for image recognition
Chip Opis

więcej podobnych podstron