목차


데이터 모델링의 요소

엔터티(Entity)

정의

업무 활동상 지속적 관심을 가지고 있어야하는 대상으로 대상들 간에 동질성을 지닌 인스턴스나 그들이 행하는 행위의 집합으로 정의


엔터티에 대한 표기법

특징

  • 해당 업무에서 필요하고 관리하고자 하는 정보에 해당
  • 유일한 식별자에 의해 식별 가능
  • 영원히 계속존재하는 두개 이상의 인스턴스 집합
  • 업무 프로세스에 이용되어야 한다.
  • 반드시 속성이 있어야 한다.
  • 엔터티 간에는 최소 한개 이상의 관계가 있어야 한다.

분류

유무형에 따른 분류

  • 유형 엔터티 : 물리적 형태가 있고 안정적, 지속적으로 활용되는 엔터티 ex) 사원, 물품, 강사
  • 개념 엔터티 : 물리적 형태가 없으며 관리해야 할 개념적 정보로 구성되는 엔터티 ex) 조직, 보험상품
  • 사건 엔터티 : 업무를 수행함에 따라 발생하는 엔터티 ex) 주문, 청구, 미납

발생시점에 따른 분류

  • 기본엔터티 : 해당 업무에 원래 존재하는 정보로 독립적으로 생성 가능하며, 타 엔터티의 부모의 역할 ex) 사원, 부서, 고객, 상품, 자재
  • 중심엔터티 : 해당 업무에 중심적 역할에 해당 ex) 계약, 사고, 예금원장, 청구, 주문
  • 행위엔터티 : 두 개 이상의 부모엔터티로부터 발생되고 자주 내용이 바뀌고 데이터양이 증가한다. ex) 주문목록, 사원변경이력

엔터티의 명명

  • 현업에서 사용하는 용어 사용
  • 최대한 약어의 미사용
  • 단수명사 사용
  • 엔터티간 유일한 이름 부여
  • 엔터티 생성의미를 고려한 이름 부여

속성(Attribute)

정의

업무에서 필요로 하는 인스턴스로 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위

  • 업무에 요구되어진다.
  • 의미상 더이상 분리되지 않는다.
  • 엔터티를 설명하고 인스턴스의 구성요소가 된다.

ex) 사원이라는 엔터티에는 홍길동이라는 사람(엔터티)이 있을 수 있다. 홍길동이라는 사람의 이름은 홍길동이고 주소는 서울시 강서구이며 생년월일 1967년 12월 31일이다. 여기에 이름, 주소, 생년월일과 같은 각각의 값을 대표하는 이름들을 속성이라 하고 홍길동, 서울시 강서구, 1967년 12월 31일과 같이 각각의 이름에 대한 구체적인 값을 속성 값(VALUE)이라고 한다.

표기법

특징

  • 해당업무에서 필요하고 관리하고자하는 정보
  • 정규화 이론에 근간하여 정해진 주식별자에 함수적 종속성을 가져야 한다.
  • 하나의 속성에는 하나의 값만을 가진다.
  • 하나의 속성에 여러 개의 값이 있는 다중값일 경우 별도의 엔터티를 이용하여 분리

사원번호(A), 사원이름(B)을 속성이라 하면 (1234 , 가나다), (4567 , 가나다)에 대해 A이면 반드시 B이지만 B이면 A라 할 수 없으므로 B는 A에 종속된다고 한다.

분류

특성에 따른 분류

  • 기본속성 : 업무로부터 추출한 모든 속성. 코드성 데이터, 일련번호, 다른 속성에 의해 생성된 속성을 제외한 모든 속성에 해당.
  • 설계속성 : 업무상 필요 데이터 이외에 모델링 혹은 업무를 규칙화 하기위해서 속성을 새로 만들거나 변형하여 정의하는 속성
  • 파생속성 : 다른 속성에 영향을 받아 발생하는 속성. 다른 속성에 영향을 받았기 때문에 정합성을 유지하기 위해 유의하여야 한다.

구성방식에 따른 분류

  • PK(Primary Key)속성 : 엔터티를 식별할 수 있는 속성
  • FK(Foreign Key)속성 : 다른 엔터티와의 관계에서 포함된 속성
  • 일반속성 : 엔터티에 포함되지만 PK, FK에 포함되지 않는 속성

도메인(Domain)

속성에 대한 데이터 타입과 크기 제약사항을 지정하는 것. 정의역

속성의 명명

속성명이 곧 사용자 인터페이스(User Interface)에 나타나기 때문에 업무와 직결되는 항목에 해당

  • 속성 이름을 정확하게 부여하고 용어의 혼란을 없애기 위해 용어사전이라는 업무사전을 프로젝트에 사용
  • 도메인 정의를 미리 하고 용어사전과 같이 사용함으로써 각 속성이 가지는 값의 종류와 범위를 명확하게 한다.
  • 용어사전과 도메인정의를 같이 사용하여 프로젝트를 진행할 경우 일관성을 확보

### 주의점

  • 일반적인 용어보다는 현업에서 사용하는 이름을 부여하는 것이 이상적
  • 수식어를 최소화한 명사형
  • 약어 최소화
  • 속성명의 유일화 \(\rightarrow\) 반정규화를 적용할 때 안정적

관계(Relationship)

정의

엔터티의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태

페어링

유의해야할 점은 관계는 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것(패어링)이고 이것의 집합을 관계로 표현한다는 것이다. 따라서 개별 인스턴스가 각각 다른 종류의 관계를 가지고 있다면 두 엔터티 사이에 두 개 이상의 관계가 형성될 수 있다.

각각의 엔터티의 인스턴스들은 자신이 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태를 관계 패어링(Relationship Paring)이라 한다.

강사인 정성철은 이춘식과 황종하에게 강의를 하는 형태로 관계가 표현되어 있고 조시형은 황종하에게 강의를 하는 형태로 되어 있다. 이와 같이 엔터티내에 인스턴스와 인스턴스사이에 관계가 설정되어 있는 어커런스를 관계 패어링이라고 한다.

분류

연관관계(Association)와 의존관계(Dependency)가 있다. 이 둘의 차이는 연관관계는 항상 이용하는 관계로 존재적 관계에 해당하고 의존관계는 상대방 클래스의 행위에 의해 관계가 형성될 때 구분하여 표현

연관관계는 표현방법이 실선으로 표현되고 소스코드에서 멤버변수로 선언하여 사용하게 하고, 의존관계는 점선으로 표현되고 행위를 나타내는 코드인 Operation(Method)에서 파라미터 등으로 이용

표기법

  • 관계명(Membership) : 관계의 이름
  • 관계차수(Cardinality) : 1:1, 1:M, M:N
  • 관계선택사양(Optionality) : 필수관계, 선택관계

관계명(mambership)

엔터티가 관계에 참여하는 형태를 지칭한다. 각각의 관계는 두 개의 관계명을 가지고 있다. 또한 각각의 관계명에 의해 두 가지의 관점으로 표현될 수 있다.

엔터티에서 관계가 시작되는 편을 관계시작점(The Beginning)이라고 부르고 받는 편을 관계끝점(The End)이라고 부른다. 참여자의 관점에 따라 관계이름이 능동적(Active)이거나 수동적(Passive)으로 명명

  • 애매한 동사를 피한다.
  • 현재형으로 표현한다.

관계차수(Degree/Cardinality)

관계선택사양(Optionality)

선택참여관계는 ERD에서 관계를 나타내는 선에서 선택참여하는 엔터티 쪽을 원으로 표시한다. 필수참여는 아무런 표시를 하지 않는다. 만약 관계가 표시된 양쪽 엔터티에 모두 선택참여가 표시된다면, 즉 0:0(Zero to Zero)의 관계가 된다면 그 관계는 잘못될 확률이 많으므로 관계설정이 잘못되었는지를 검토해 보아야 한다.

관계 검토사항

두 개의 엔터티 사이에 관심있는 연관규칙이 존재하는가? 두 개의 엔터티 사이에 정보의 조합이 발생되는가? 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가? 업무기술서, 장표에 관계연결을 가능하게 하는 동사(Verb)가 있는가?

관계 읽는법

이러한 질문 방법은 엔터티간 관계설정뿐 아니라 업무의 흐름도 분석이 되는 실제 프로젝트에서 효과적인 방법이 된다.

식별자(identifiers)

하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 의미하며 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재

식별자라는 용어는 업무적으로 구분이 되는 정보로 생각할 수 있으므로 논리 데이터 모델링 단계에서 사용

키는 데이터베이스 테이블에 접근을 위한 매개체로서 물리 데이터 모델링 단계에서 사용

식별자의 특징

주식별자의 특징

  • 주식별자에 의해 엔터티 내에 모든 인스턴스들이 유일하게 구분
  • 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수
  • 지정된 주식별자의 값은 자주 변하지 않는 것
  • 주식별자가 지정이 되면 반드시 값이 들어와야 한다.

대체식별자의 특징은 주식별자와 동일

외부식별자의 경우 참조무결성 제약조건(Referential Integrity)에 따른 특징을 지님

식별자의 분류

식별자의 표기법

주식별자 도출

  • 해당 업무에서 자주 이용되는 속성을 주식별자로 지정
  • 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.
  • 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.
LS0tCnRpdGxlOiAi642w7J207YSwIOuqqOuNuOungeydmCDsmpTshowiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazogCiAgICB0aGVtZTogc3BhY2VsYWIKLS0tCgoqKioqCgojIOuqqeywqAoKKyDsl5TthLDti7AKKyDsho3shLEKKyDqtIDqs4QKKyDsi53rs4TsnpAKCioqKgoKCiMg642w7J207YSwIOuqqOuNuOungeydmCDsmpTshowgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHN9CgohW10oaHR0cDovL3d3dy5kYmd1aWRlLm5ldC9wdWJsaXNoaW5nL2ltZy9rbm93bGVkZ2UvU1FMXzAxMy5qcGcpCgojIyDsl5TthLDti7AoRW50aXR5KQoKIyMjIOygleydmAoK7JeF66y0IO2ZnOuPmeyDgSDsp4Dsho3soIEg6rSA7Ius7J2EIOqwgOyngOqzoCDsnojslrTslbztlZjripQg64yA7IOB7Jy866GcIOuMgOyDgeuTpCDqsITsl5Ag64+Z7KeI7ISx7J2EIOyngOuLjCDsnbjsiqTthLTsiqTrgpgg6re465Ok7J20IO2Wie2VmOuKlCDtlonsnITsnZgg7KeR7ZWp7Jy866GcIOygleydmAoKIVtdKGh0dHA6Ly93d3cuZGJndWlkZS5uZXQvcHVibGlzaGluZy9pbWcva25vd2xlZGdlL1NRTF8wMjMuanBnKQoKKioqKgoKIyMjIOyXlO2EsO2LsOyXkCDrjIDtlZwg7ZGc6riw67KVCgohW10oaHR0cDovL3d3dy5kYmd1aWRlLm5ldC9wdWJsaXNoaW5nL2ltZy9rbm93bGVkZ2UvU1FMXzAyNC5qcGcpCgojIyMg7Yq57KeVCgorIO2VtOuLuSDsl4XrrLTsl5DshJwg7ZWE7JqU7ZWY6rOgIOq0gOumrO2VmOqzoOyekCDtlZjripQg7KCV67O07JeQIO2VtOuLuQorIOycoOydvO2VnCDsi53rs4TsnpDsl5Ag7J2Y7ZW0IOyLneuzhCDqsIDriqUKKyDsmIHsm5Dtnogg6rOE7IaN7KG07J6s7ZWY64qUIOuRkOqwnCDsnbTsg4HsnZgg7J247Iqk7YS07IqkIOynke2VqQorIOyXheustCDtlITroZzshLjsiqTsl5Ag7J207Jqp65CY7Ja07JW8IO2VnOuLpC4KKyDrsJjrk5zsi5wg7IaN7ISx7J20IOyeiOyWtOyVvCDtlZzri6QuCisg7JeU7YSw7YuwIOqwhOyXkOuKlCDstZzshowg7ZWc6rCcIOydtOyDgeydmCDqtIDqs4TqsIAg7J6I7Ja07JW8IO2VnOuLpC4KCiMjIyDrtoTrpZgKCiMjIyMg7Jyg66y07ZiV7JeQIOuUsOuluCDrtoTrpZgKCisg7Jyg7ZiVIOyXlO2EsO2LsCA6IOusvOumrOyggSDtmJXtg5zqsIAg7J6I6rOgIOyViOygleyggSwg7KeA7IaN7KCB7Jy866GcIO2ZnOyaqeuQmOuKlCDsl5TthLDti7AgKmV4KSDsgqzsm5AsIOusvO2SiCwg6rCV7IKsKgorIOqwnOuFkCDsl5TthLDti7AgOiDrrLzrpqzsoIEg7ZiV7YOc6rCAIOyXhuycvOupsCDqtIDrpqztlbTslbwg7ZWgIOqwnOuFkOyggSDsoJXrs7TroZwg6rWs7ISx65CY64qUIOyXlO2EsO2LsCAqZXgpIOyhsOyngSwg67O07ZeY7IOB7ZKIKgorIOyCrOqxtCDsl5TthLDti7AgOiDsl4XrrLTrpbwg7IiY7ZaJ7ZWo7JeQIOuUsOudvCDrsJzsg53tlZjripQg7JeU7YSw7YuwICpleCkg7KO866y4LCDssq3qtawsIOuvuOuCqSoKCiMjIyMg67Cc7IOd7Iuc7KCQ7JeQIOuUsOuluCDrtoTrpZgKCisg6riw67O47JeU7YSw7YuwIDog7ZW064u5IOyXheustOyXkCDsm5Drnpgg7KG07J6s7ZWY64qUIOygleuztOuhnCDrj4Xrpr3soIHsnLzroZwg7IOd7ISxIOqwgOuKpe2VmOupsCwg7YOAIOyXlO2EsO2LsOydmCDrtoDrqqjsnZgg7Jet7ZWgICpleCkg7IKs7JuQLCDrtoDshJwsIOqzoOqwnSwg7IOB7ZKILCDsnpDsnqwqCisg7KSR7Ius7JeU7YSw7YuwIDog7ZW064u5IOyXheustOyXkCDspJHsi6zsoIEg7Jet7ZWg7JeQIO2VtOuLuSAqZXgpIOqzhOyVvSwg7IKs6rOgLCDsmIjquIjsm5DsnqUsIOyyreq1rCwg7KO866y4KgorIO2WieychOyXlO2EsO2LsCA6IOuRkCDqsJwg7J207IOB7J2YIOu2gOuqqOyXlO2EsO2LsOuhnOu2gO2EsCDrsJzsg53rkJjqs6Ag7J6Q7KO8IOuCtOyaqeydtCDrsJTrgIzqs6Ag642w7J207YSw7JaR7J20IOymneqwgO2VnOuLpC4gKmV4KSDso7zrrLjrqqnroZ0sIOyCrOybkOuzgOqyveydtOugpSoKCiMjIyDsl5TthLDti7DsnZgg66qF66qFCgorIO2YhOyXheyXkOyEnCDsgqzsmqntlZjripQg7Jqp7Ja0IOyCrOyaqQorIOy1nOuMgO2VnCDslb3slrTsnZgg66+47IKs7JqpCisg64uo7IiY66qF7IKsIOyCrOyaqQorIOyXlO2EsO2LsOqwhCDsnKDsnbztlZwg7J2066aEIOu2gOyXrAorIOyXlO2EsO2LsCDsg53shLHsnZjrr7jrpbwg6rOg66Ck7ZWcIOydtOumhCDrtoDsl6wKCiMjIOyGjeyEsShBdHRyaWJ1dGUpCgoKIyMjIOygleydmAoK7JeF66y07JeQ7IScIO2VhOyalOuhnCDtlZjripQg7J247Iqk7YS07Iqk66GcIOq0gOumrO2VmOqzoOyekCDtlZjripQg7J2Y66+47IOBIOuNlCDsnbTsg4Eg67aE66as65CY7KeAIOyViuuKlCDstZzshozsnZgg642w7J207YSwIOuLqOychAoKKyDsl4XrrLTsl5Ag7JqU6rWs65CY7Ja07KeE64ukLgorIOydmOuvuOyDgSDrjZTsnbTsg4Eg67aE66as65CY7KeAIOyViuuKlOuLpC4KKyDsl5TthLDti7Drpbwg7ISk66qF7ZWY6rOgIOyduOyKpO2EtOyKpOydmCDqtazshLHsmpTshozqsIAg65Cc64ukLgoKIVtdKGh0dHA6Ly93d3cuZGJndWlkZS5uZXQvcHVibGlzaGluZy9pbWcva25vd2xlZGdlL1NRTF8wMzMuanBnKQoKKmV4KSDsgqzsm5DsnbTrnbzripQg7JeU7YSw7Yuw7JeQ64qUIO2Zjeq4uOuPmeydtOudvOuKlCDsgqzrnowo7JeU7YSw7YuwKeydtCDsnojsnYQg7IiYIOyeiOuLpC4g7ZmN6ri464+Z7J20652864qUIOyCrOuejOydmCDsnbTrpoTsnYAg7ZmN6ri464+Z7J206rOgIOyjvOyGjOuKlCDshJzsmrjsi5wg6rCV7ISc6rWs7J2066mwIOyDneuFhOyblOydvCAxOTY364WEIDEy7JuUIDMx7J287J2064ukLiDsl6zquLDsl5Ag7J2066aELCDso7zshowsIOyDneuFhOyblOydvOqzvCDqsJnsnYAg6rCB6rCB7J2YIOqwkuydhCDrjIDtkZztlZjripQg7J2066aE65Ok7J2EIOyGjeyEseydtOudvCDtlZjqs6Ag7ZmN6ri464+ZLCDshJzsmrjsi5wg6rCV7ISc6rWsLCAxOTY364WEIDEy7JuUIDMx7J286rO8IOqwmeydtCDqsIHqsIHsnZgg7J2066aE7JeQIOuMgO2VnCDqtazssrTsoIHsnbgg6rCS7J2EIOyGjeyEsSDqsJIoVkFMVUUp7J2065286rOgIO2VnOuLpC4qCgojIyMg7ZGc6riw67KVCiFbXShodHRwOi8vd3d3LmRiZ3VpZGUubmV0L3B1Ymxpc2hpbmcvaW1nL2tub3dsZWRnZS9TUUxfMDM0LmpwZykKCiMjIyDtirnsp5UKCisg7ZW064u57JeF66y07JeQ7IScIO2VhOyalO2VmOqzoCDqtIDrpqztlZjqs6DsnpDtlZjripQg7KCV67O0Cisg7KCV6rec7ZmUIOydtOuhoOyXkCDqt7zqsITtlZjsl6wg7KCV7ZW07KeEIOyjvOyLneuzhOyekOyXkCDtlajsiJjsoIEg7KKF7IaN7ISx7J2EIOqwgOyguOyVvCDtlZzri6QuCisg7ZWY64KY7J2YIOyGjeyEseyXkOuKlCDtlZjrgpjsnZgg6rCS66eM7J2EIOqwgOynhOuLpC4gCisg7ZWY64KY7J2YIOyGjeyEseyXkCDsl6zrn6wg6rCc7J2YIOqwkuydtCDsnojripQg64uk7KSR6rCS7J28IOqyveyasCDrs4Trj4TsnZgg7JeU7YSw7Yuw66W8IOydtOyaqe2VmOyXrCDrtoTrpqwKCirsgqzsm5DrsojtmLgoQSksIOyCrOybkOydtOumhChCKeydhCDsho3shLHsnbTrnbwg7ZWY66m0ICgxMjM0ICwg6rCA64KY64ukKSwgKDQ1NjcgLCDqsIDrgpjri6Qp7JeQIOuMgO2VtApB7J2066m0IOuwmOuTnOyLnCBC7J207KeA66eMIELsnbTrqbQgQeudvCDtlaAg7IiYIOyXhuycvOuvgOuhnCBC64qUIEHsl5Ag7KKF7IaN65Cc64uk6rOgIO2VnOuLpC4qCgojIyMg67aE66WYCgojIyMjIO2KueyEseyXkCDrlLDrpbgg67aE66WYCgorIOq4sOuzuOyGjeyEsSA6IOyXheustOuhnOu2gO2EsCDstpTstpztlZwg66qo65OgIOyGjeyEsS4g7L2U65Oc7ISxIOuNsOydtO2EsCwg7J2866Co67KI7Zi4LCDri6Trpbgg7IaN7ISx7JeQIOydmO2VtCDsg53shLHrkJwg7IaN7ISx7J2EIOygnOyZuO2VnCDrqqjrk6Ag7IaN7ISx7JeQIO2VtOuLuS4KKyDshKTqs4Tsho3shLEgOiDsl4XrrLTsg4Eg7ZWE7JqUIOuNsOydtO2EsCDsnbTsmbjsl5Ag66qo642466eBIO2YueydgCDsl4XrrLTrpbwg6rec7LmZ7ZmUIO2VmOq4sOychO2VtOyEnCDsho3shLHsnYQg7IOI66GcIOunjOuTpOqxsOuCmCDrs4DtmJXtlZjsl6wg7KCV7J2Y7ZWY64qUIOyGjeyEsQorIO2MjOyDneyGjeyEsSA6IOuLpOuluCDsho3shLHsl5Ag7JiB7Zal7J2EIOuwm+yVhCDrsJzsg53tlZjripQg7IaN7ISxLiDri6Trpbgg7IaN7ISx7JeQIOyYge2WpeydhCDrsJvslZjquLAg65WM66y47JeQIOygle2VqeyEseydhCDsnKDsp4DtlZjquLAg7JyE7ZW0IOycoOydmO2VmOyXrOyVvCDtlZzri6QuCgojIyMjIOq1rOyEseuwqeyLneyXkCDrlLDrpbgg67aE66WYCgorIFBLKFByaW1hcnkgS2V5KeyGjeyEsSA6IOyXlO2EsO2LsOulvCDsi53rs4TtlaAg7IiYIOyeiOuKlCDsho3shLEKKyBGSyhGb3JlaWduIEtleSnsho3shLEgOiDri6Trpbgg7JeU7YSw7Yuw7JmA7J2YIOq0gOqzhOyXkOyEnCDtj6ztlajrkJwg7IaN7ISxCisg7J2867CY7IaN7ISxIDog7JeU7YSw7Yuw7JeQIO2PrO2VqOuQmOyngOunjCBQSywgRkvsl5Ag7Y+s7ZWo65CY7KeAIOyViuuKlCDsho3shLEKCgojIyMjIOuPhOuplOyduChEb21haW4pCgrsho3shLHsl5Ag64yA7ZWcIOuNsOydtO2EsCDtg4DsnoXqs7wg7YGs6riwIOygnOyVveyCrO2VreydhCDsp4DsoJXtlZjripQg6rKDLiDsoJXsnZjsl60KCiMjIyDsho3shLHsnZgg66qF66qFCgrsho3shLHrqoXsnbQg6rOnIOyCrOyaqeyekCDsnbjthLDtjpjsnbTsiqQoVXNlciBJbnRlcmZhY2Up7JeQIOuCmO2DgOuCmOq4sCDrlYzrrLjsl5Ag7JeF66y07JmAIOyngeqysOuQmOuKlCDtla3rqqnsl5Ag7ZW064u5CgorIOyGjeyEsSDsnbTrpoTsnYQg7KCV7ZmV7ZWY6rKMIOu2gOyXrO2VmOqzoCDsmqnslrTsnZgg7Zi8656A7J2EIOyXhuyVoOq4sCDsnITtlbQg7Jqp7Ja07IKs7KCE7J20652864qUIOyXheustOyCrOyghOydhCDtlITroZzsoJ3tirjsl5Ag7IKs7JqpCisg64+E66mU7J24IOygleydmOulvCDrr7jrpqwg7ZWY6rOgIOyaqeyWtOyCrOyghOqzvCDqsJnsnbQg7IKs7Jqp7ZWo7Jy866Gc7I2oIOqwgSDsho3shLHsnbQg6rCA7KeA64qUIOqwkuydmCDsooXrpZjsmYAg67KU7JyE66W8IOuqhe2Zle2VmOqyjCDtlZzri6QuCisg7Jqp7Ja07IKs7KCE6rO8IOuPhOuplOyduOygleydmOulvCDqsJnsnbQg7IKs7Jqp7ZWY7JesIO2UhOuhnOygne2KuOulvCDsp4TtlontlaAg6rK97JqwIOydvOq0gOyEseydhCDtmZXrs7QKCiFbXShodHRwOi8vd3d3LmRiZ3VpZGUubmV0L3B1Ymxpc2hpbmcvaW1nL2tub3dsZWRnZS9TUUxfMDM3LmpwZykKIyMjIOyjvOydmOygkAoKKyDsnbzrsJjsoIHsnbgg7Jqp7Ja067O064uk64qUIO2YhOyXheyXkOyEnCDsgqzsmqntlZjripQg7J2066aE7J2EIOu2gOyXrO2VmOuKlCDqsoPsnbQg7J207IOB7KCBCisg7IiY7Iud7Ja066W8IOy1nOyGjO2ZlO2VnCDrqoXsgqztmJUKKyDslb3slrQg7LWc7IaM7ZmUCisg7IaN7ISx66qF7J2YIOycoOydvO2ZlCAkXHJpZ2h0YXJyb3ckIOuwmOygleq3nO2ZlOulvCDsoIHsmqntlaAg65WMIOyViOygleyggQoKCiMjIOq0gOqzhChSZWxhdGlvbnNoaXApCgojIyMg7KCV7J2YCgrsl5TthLDti7DsnZgg7J247Iqk7YS07IqkIOyCrOydtOydmCDrhbzrpqzsoIHsnbgg7Jew6rSA7ISx7Jy866Gc7IScIOyhtOyerOydmCDtmJXtg5zroZzshJzrgpgg7ZaJ7JyE66Gc7IScIOyEnOuhnOyXkOqyjCDsl7DqtIDshLHsnbQg67aA7Jes65CcIOyDge2DnAoKIyMjIO2OmOyWtOungQoK7Jyg7J2Y7ZW07JW87ZWgIOygkOydgCDqtIDqs4TripQg7JeU7YSw7YuwIOyViOyXkCDsnbjsiqTthLTsiqTqsIAg6rCc67OE7KCB7Jy866GcIOq0gOqzhOulvCDqsIDsp4DripQg6rKDKO2MqOyWtOungSnsnbTqs6Ag7J206rKD7J2YIOynke2VqeydhCDqtIDqs4TroZwg7ZGc7ZiE7ZWc64uk64qUIOqyg+ydtOuLpC4g65Sw65287IScIOqwnOuzhCDsnbjsiqTthLTsiqTqsIAg6rCB6rCBIOuLpOuluCDsooXrpZjsnZgg6rSA6rOE66W8IOqwgOyngOqzoCDsnojri6TrqbQg65GQIOyXlO2EsO2LsCDsgqzsnbTsl5Ag65GQIOqwnCDsnbTsg4HsnZgg6rSA6rOE6rCAIO2YleyEseuQoCDsiJgg7J6I64ukLgoK6rCB6rCB7J2YIOyXlO2EsO2LsOydmCDsnbjsiqTthLTsiqTrk6TsnYAg7J6Q7Iug7J20IOq0gOugqOuQnCDsnbjsiqTthLTsiqTrk6Tqs7wg6rSA6rOE7J2YIOyWtOy7pOufsOyKpOuhnCDssLjsl6ztlZjripQg7ZiV7YOc66W8IOq0gOqzhCDtjKjslrTrp4EoUmVsYXRpb25zaGlwIFBhcmluZynsnbTrnbwg7ZWc64ukLgoK6rCV7IKs7J24IOygleyEseyyoOydgCDsnbTstpjsi53qs7wg7Zmp7KKF7ZWY7JeQ6rKMIOqwleydmOulvCDtlZjripQg7ZiV7YOc66GcIOq0gOqzhOqwgCDtkZztmITrkJjslrQg7J6I6rOgIOyhsOyLnO2YleydgCDtmansooXtlZjsl5Dqsowg6rCV7J2Y66W8IO2VmOuKlCDtmJXtg5zroZwg65CY7Ja0IOyeiOuLpC4g7J207JmAIOqwmeydtCDsl5TthLDti7DrgrTsl5Ag7J247Iqk7YS07Iqk7JmAIOyduOyKpO2EtOyKpOyCrOydtOyXkCDqtIDqs4TqsIAg7ISk7KCV65CY7Ja0IOyeiOuKlCDslrTsu6Trn7DsiqTrpbwg6rSA6rOEIO2MqOyWtOungeydtOudvOqzoCDtlZzri6QuCgohW10oaHR0cDovL3d3dy5kYmd1aWRlLm5ldC9wdWJsaXNoaW5nL2ltZy9rbm93bGVkZ2UvU1FMXzAzOS5qcGcpCgojIyMg67aE66WYCgrsl7DqtIDqtIDqs4QoQXNzb2NpYXRpb24p7JmAIOydmOyhtOq0gOqzhChEZXBlbmRlbmN5KeqwgCDsnojri6QuIOydtCDrkZjsnZgg7LCo7J2064qUIOyXsOq0gOq0gOqzhOuKlCDtla3sg4Eg7J207Jqp7ZWY64qUIOq0gOqzhOuhnCDsobTsnqzsoIEg6rSA6rOE7JeQIO2VtOuLue2VmOqzoCDsnZjsobTqtIDqs4TripQg7IOB64yA67CpIO2BtOuemOyKpOydmCDtlonsnITsl5Ag7J2Y7ZW0IOq0gOqzhOqwgCDtmJXshLHrkKAg65WMIOq1rOu2hO2VmOyXrCDtkZztmIQKCuyXsOq0gOq0gOqzhOuKlCDtkZztmITrsKnrspXsnbQg7Iuk7ISg7Jy866GcIO2RnO2YhOuQmOqzoCDshozsiqTsvZTrk5zsl5DshJwg66mk67KE67OA7IiY66GcIOyEoOyWuO2VmOyXrCDsgqzsmqntlZjqsowg7ZWY6rOgLCDsnZjsobTqtIDqs4TripQg7KCQ7ISg7Jy866GcIO2RnO2YhOuQmOqzoCDtlonsnITrpbwg64KY7YOA64K064qUIOy9lOuTnOyduCBPcGVyYXRpb24oTWV0aG9kKeyXkOyEnCDtjIzrnbzrr7jthLAg65Ox7Jy866GcIOydtOyaqQoKIVtdKGh0dHA6Ly93d3cuZGJndWlkZS5uZXQvcHVibGlzaGluZy9pbWcva25vd2xlZGdlL1NRTF8wNDAuanBnKQoKIyMjIO2RnOq4sOuylQoKKyDqtIDqs4TrqoUoTWVtYmVyc2hpcCkgOiDqtIDqs4TsnZgg7J2066aECisg6rSA6rOE7LCo7IiYKENhcmRpbmFsaXR5KSA6IDE6MSwgMTpNLCBNOk4KKyDqtIDqs4TshKDtg53sgqzslpEoT3B0aW9uYWxpdHkpIDog7ZWE7IiY6rSA6rOELCDshKDtg53qtIDqs4QKCgojIyMjIOq0gOqzhOuqhShtYW1iZXJzaGlwKQoKIOyXlO2EsO2LsOqwgCDqtIDqs4Tsl5Ag7LC47Jes7ZWY64qUIO2Yle2DnOulvCDsp4Dsua3tlZzri6QuIOqwgeqwgeydmCDqtIDqs4TripQg65GQIOqwnOydmCDqtIDqs4TrqoXsnYQg6rCA7KeA6rOgIOyeiOuLpC4g65iQ7ZWcIOqwgeqwgeydmCDqtIDqs4TrqoXsl5Ag7J2Y7ZW0IOuRkCDqsIDsp4DsnZgg6rSA7KCQ7Jy866GcIO2RnO2YhOuQoCDsiJgg7J6I64ukLgoK7JeU7YSw7Yuw7JeQ7IScIOq0gOqzhOqwgCDsi5zsnpHrkJjripQg7Y647J2EIOq0gOqzhOyLnOyekeygkChUaGUgQmVnaW5uaW5nKeydtOudvOqzoCDrtoDrpbTqs6Ag67Cb64qUIO2OuOydhCDqtIDqs4TrgZ3soJAoVGhlIEVuZCnsnbTrnbzqs6Ag67aA66W464ukLiAK7LC47Jes7J6Q7J2YIOq0gOygkOyXkCDrlLDrnbwg6rSA6rOE7J2066aE7J20IOuKpeuPmeyggShBY3RpdmUp7J206rGw64KYIOyImOuPmeyggShQYXNzaXZlKeycvOuhnCDrqoXrqoUgCgorIOyVoOunpO2VnCDrj5nsgqzrpbwg7ZS87ZWc64ukLgorIO2YhOyerO2YleycvOuhnCDtkZztmITtlZzri6QuIAoKIyMjIyDqtIDqs4TssKjsiJgoRGVncmVlL0NhcmRpbmFsaXR5KQoKIVtdKGh0dHA6Ly93d3cuZGJndWlkZS5uZXQvcHVibGlzaGluZy9pbWcva25vd2xlZGdlL1NRTF8wNDIuanBnKQoKIVtdKGh0dHA6Ly93d3cuZGJndWlkZS5uZXQvcHVibGlzaGluZy9pbWcva25vd2xlZGdlL1NRTF8wNDMuanBnKQoKIVtdKGh0dHA6Ly93d3cuZGJndWlkZS5uZXQvcHVibGlzaGluZy9pbWcva25vd2xlZGdlL1NRTF8wNDQuanBnKQoKIyMjIyDqtIDqs4TshKDtg53sgqzslpEoT3B0aW9uYWxpdHkpCgohW10oaHR0cDovL3d3dy5kYmd1aWRlLm5ldC9wdWJsaXNoaW5nL2ltZy9rbm93bGVkZ2UvU1FMXzA0NS5qcGcpCgrshKDtg53ssLjsl6zqtIDqs4TripQgRVJE7JeQ7IScIOq0gOqzhOulvCDrgpjtg4DrgrTripQg7ISg7JeQ7IScIOyEoO2DneywuOyXrO2VmOuKlCDsl5TthLDti7Ag7Kq97J2EIOybkOycvOuhnCDtkZzsi5ztlZzri6QuIO2VhOyImOywuOyXrOuKlCDslYTrrLTrn7Ag7ZGc7Iuc66W8IO2VmOyngCDslYrripTri6QuCuunjOyVvSDqtIDqs4TqsIAg7ZGc7Iuc65CcIOyWkeyqvSDsl5TthLDti7Dsl5Ag66qo65GQIOyEoO2DneywuOyXrOqwgCDtkZzsi5zrkJzri6TrqbQsIOymiSAwOjAoWmVybyB0byBaZXJvKeydmCDqtIDqs4TqsIAg65Cc64uk66m0IOq3uCDqtIDqs4TripQg7J6Y66q765CgIO2ZleuloOydtCDrp47snLzrr4DroZwg6rSA6rOE7ISk7KCV7J20IOyemOuqu+uQmOyXiOuKlOyngOulvCDqsoDthqDtlbQg67O07JWE7JW8IO2VnOuLpC4KCiFbXShodHRwOi8vd3d3LmRiZ3VpZGUubmV0L3B1Ymxpc2hpbmcvaW1nL2tub3dsZWRnZS9TUUxfMDQ2LmpwZykKCgojIyMjIOq0gOqzhCDqsoDthqDsgqztla0KCuuRkCDqsJzsnZgg7JeU7YSw7YuwIOyCrOydtOyXkCDqtIDsi6zsnojripQg7Jew6rSA6rec7LmZ7J20IOyhtOyerO2VmOuKlOqwgD8K65GQIOqwnOydmCDsl5TthLDti7Ag7IKs7J207JeQIOygleuztOydmCDsobDtlansnbQg67Cc7IOd65CY64qU6rCAPwrsl4XrrLTquLDsiKDshJwsIOyepe2RnOyXkCDqtIDqs4Tsl7DqsrDsl5Ag64yA7ZWcIOq3nOy5meydtCDshJzsiKDrkJjslrQg7J6I64qU6rCAPwrsl4XrrLTquLDsiKDshJwsIOyepe2RnOyXkCDqtIDqs4Tsl7DqsrDsnYQg6rCA64ql7ZWY6rKMIO2VmOuKlCDrj5nsgqwoVmVyYinqsIAg7J6I64qU6rCAPwoKIyMjIyDqtIDqs4Qg7J2964qU67KVCgohW10oaHR0cDovL3d3dy5kYmd1aWRlLm5ldC9wdWJsaXNoaW5nL2ltZy9rbm93bGVkZ2UvU1FMXzA0Ny5qcGcpCgrsnbTrn6ztlZwg7KeI66y4IOuwqeuyleydgCDsl5TthLDti7DqsIQg6rSA6rOE7ISk7KCV67+QIOyVhOuLiOudvCDsl4XrrLTsnZgg7Z2Q66aE64+EIOu2hOyEneydtCDrkJjripQg7Iuk7KCcIO2UhOuhnOygne2KuOyXkOyEnCDtmqjqs7zsoIHsnbgg67Cp67KV7J20IOuQnOuLpC4KCiMjIOyLneuzhOyekChpZGVudGlmaWVycykKCu2VmOuCmOydmCDsl5TthLDti7Dsl5Ag6rWs7ISx65CY7Ja0IOyeiOuKlCDsl6zrn6wg6rCc7J2YIOyGjeyEsSDspJHsl5Ag7JeU7YSw7Yuw66W8IOuMgO2RnO2VoCDsiJgg7J6I64qUIOyGjeyEseydhCDsnZjrr7jtlZjrqbAg7ZWY64KY7J2YIOyXlO2EsO2LsOuKlCDrsJjrk5zsi5wg7ZWY64KY7J2YIOycoOydvO2VnCDsi53rs4TsnpDqsIAg7KG07J6sCgoq7Iud67OE7J6Q652864qUIOyaqeyWtOuKlCDsl4XrrLTsoIHsnLzroZwg6rWs67aE7J20IOuQmOuKlCDsoJXrs7TroZwg7IOd6rCB7ZWgIOyImCDsnojsnLzrr4DroZwg64W866asIOuNsOydtO2EsCDrqqjrjbjrp4Eg64uo6rOE7JeQ7IScIOyCrOyaqSoKCirtgqTripQg642w7J207YSw67Kg7J207IqkIO2FjOydtOu4lOyXkCDsoJHqt7zsnYQg7JyE7ZWcIOunpOqwnOyytOuhnOyEnCDrrLzrpqwg642w7J207YSwIOuqqOuNuOungSDri6jqs4Tsl5DshJwg7IKs7JqpKgoKCiMjIyDsi53rs4TsnpDsnZgg7Yq57KeVCgojIyMjIOyjvOyLneuzhOyekOydmCDtirnsp5UKCisg7KO87Iud67OE7J6Q7JeQIOydmO2VtCDsl5TthLDti7Ag64K07JeQIOuqqOuToCDsnbjsiqTthLTsiqTrk6TsnbQg7Jyg7J287ZWY6rKMIOq1rOu2hAorIOyjvOyLneuzhOyekOulvCDqtazshLHtlZjripQg7IaN7ISx7J2YIOyImOuKlCDsnKDsnbzshLHsnYQg66eM7KGx7ZWY64qUIOy1nOyGjOydmCDsiJgKKyDsp4DsoJXrkJwg7KO87Iud67OE7J6Q7J2YIOqwkuydgCDsnpDso7wg67OA7ZWY7KeAIOyViuuKlCDqsoMKKyDso7zsi53rs4TsnpDqsIAg7KeA7KCV7J20IOuQmOuptCDrsJjrk5zsi5wg6rCS7J20IOuTpOyWtOyZgOyVvCDtlZzri6QuCgoKIVtdKGh0dHA6Ly93d3cuZGJndWlkZS5uZXQvcHVibGlzaGluZy9pbWcva25vd2xlZGdlL1NRTF8wNDkuanBnKQoKKirrjIDssrTsi53rs4TsnpDsnZgg7Yq57KeV7J2AIOyjvOyLneuzhOyekOyZgCDrj5nsnbwqKgoKKirsmbjrtoDsi53rs4TsnpDsnZgg6rK97JqwIOywuOyhsOustOqysOyEsSDsoJzslb3sobDqsbQoUmVmZXJlbnRpYWwgSW50ZWdyaXR5KeyXkCDrlLDrpbgg7Yq57KeV7J2EIOyngOuLmCoqCgojIyMg7Iud67OE7J6Q7J2YIOu2hOulmAoKIVtdKGh0dHA6Ly93d3cuZGJndWlkZS5uZXQvcHVibGlzaGluZy9pbWcva25vd2xlZGdlL1NRTF8wNTAuanBnKQoKIVtdKGh0dHA6Ly93d3cuZGJndWlkZS5uZXQvcHVibGlzaGluZy9pbWcva25vd2xlZGdlL1NRTF8wNTEuanBnKQoKCiMjIyDsi53rs4TsnpDsnZgg7ZGc6riw67KVCgohW10oaHR0cDovL3d3dy5kYmd1aWRlLm5ldC9wdWJsaXNoaW5nL2ltZy9rbm93bGVkZ2UvU1FMXzA1Mi5qcGcpCgojIyMjIOyjvOyLneuzhOyekCDrj4TstpwKCisg7ZW064u5IOyXheustOyXkOyEnCDsnpDso7wg7J207Jqp65CY64qUIOyGjeyEseydhCDso7zsi53rs4TsnpDroZwg7KeA7KCVCisg66qF7LmtLCDrgrTsl60g65Ox6rO8IOqwmeydtCDsnbTrpoTsnLzroZwg6riw7Iig65CY64qUIOqyg+uTpOydgCDqsIDriqXtlZjrqbQg7KO87Iud67OE7J6Q66GcIOyngOygle2VmOyngCDslYrripTri6QuCisg67O17ZWp7Jy866GcIOyjvOyLneuzhOyekOuhnCDqtazshLHtlaAg6rK97JqwIOuEiOustCDrp47snYAg7IaN7ISx7J20IO2PrO2VqOuQmOyngCDslYrrj4TroZ0g7ZWc64ukLgoKCg==