From eb6b16f450c88097ae5d6a3d23c81b1bb7037357 Mon Sep 17 00:00:00 2001 From: Jimmy Song Date: Mon, 24 Apr 2017 17:19:04 -0700 Subject: [PATCH] Initial Commit --- .gitignore | 1 + address.go | 37 +++++++++++++++++++ address_test.go | 90 +++++++++++++++++++++++++++++++++++++++++++++ base58.go | 77 ++++++++++++++++++++++++++++++++++++++ block.go | 15 ++++++++ const.go | 6 +++ example_transaction | 10 +++++ keccak.go | 20 ++++++++++ ringsignature.go | 53 ++++++++++++++++++++++++++ transaction.go | 73 ++++++++++++++++++++++++++++++++++++ varint.go | 19 ++++++++++ varint_test.go | 49 ++++++++++++++++++++++++ 12 files changed, 450 insertions(+) create mode 100644 .gitignore create mode 100644 address.go create mode 100644 address_test.go create mode 100644 base58.go create mode 100644 block.go create mode 100644 const.go create mode 100644 example_transaction create mode 100644 keccak.go create mode 100644 ringsignature.go create mode 100644 transaction.go create mode 100644 varint.go create mode 100644 varint_test.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e4e5f6c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*~ \ No newline at end of file diff --git a/address.go b/address.go new file mode 100644 index 0000000..cc00f57 --- /dev/null +++ b/address.go @@ -0,0 +1,37 @@ +package moneroutil + +import ( + "bytes" +) + +type Address struct { + network int + spendingKey []byte + viewingKey []byte +} + +func (a *Address) Base58() (result string) { + prefix := []byte{byte(a.network)} + checksum := Checksum(prefix, a.spendingKey, a.viewingKey) + result = EncodeMoneroBase58(prefix, a.spendingKey, a.viewingKey, checksum) + return +} + +func NewAddress(address string) (result *Address, err string) { + raw := DecodeMoneroBase58(address) + if len(raw) != 69 { + err = "Address is the wrong length" + return + } + checksum := Checksum(raw[:65]) + if bytes.Compare(checksum, raw[65:]) != 0 { + err = "Checksum does not validate" + return + } + result = &Address{ + network: int(raw[0]), + spendingKey: raw[1:33], + viewingKey: raw[33:65], + } + return +} diff --git a/address_test.go b/address_test.go new file mode 100644 index 0000000..942542d --- /dev/null +++ b/address_test.go @@ -0,0 +1,90 @@ +package moneroutil + +import ( + "bytes" + "encoding/hex" + "testing" +) + +func TestAddressError(t *testing.T) { + _, err := NewAddress("") + want := "Address is the wrong length" + if err != want { + t.Errorf("want: %s, got: %s", want, err) + } + _, err = NewAddress("46w3n5EGhBeZkYmKvQRsd8UK9GhvcbYWQDobJape3NLMMFEjFZnJ3CnRmeKspubQGiP8iMTwFEX2QiBsjUkjKT4SSPd3fK1") + want = "Checksum does not validate" + if err != want { + t.Errorf("want: %s, got: %s", want, err) + } +} + +func TestAddress(t *testing.T) { + tests := []struct { + name string + network int + spendingKeyHex string + viewingKeyHex string + address string + }{ + { + name: "generic", + network: MainNetwork, + spendingKeyHex: "8c1a9d5ff5aaf1c3cdeb2a1be62f07a34ae6b15fe47a254c8bc240f348271679", + viewingKeyHex: "0a29b163e392eb9416a52907fd7d3b84530f8d02ff70b1f63e72fdcb54cf7fe1", + address: "46w3n5EGhBeZkYmKvQRsd8UK9GhvcbYWQDobJape3NLMMFEjFZnJ3CnRmeKspubQGiP8iMTwFEX2QiBsjUkjKT4SSPd3fKp", + }, + { + name: "generic 2", + network: MainNetwork, + spendingKeyHex: "5007b84275af9a173c2080683afce90b2157ab640c18ddd5ce3e060a18a9ce99", + viewingKeyHex: "27024b45150037b677418fcf11ba9675494ffdf994f329b9f7a8f8402b7934a0", + address: "44f1Y84r9Lu4tQdLWRxV122rygfhUeVBrcmBaqcYCwUHScmf1ht8DFLXX9YN4T7nPPLcpqYLUdrFiY77nQYeH9RuK9gg4p6", + }, + { + name: "require 1 padding in middle", + network: MainNetwork, + spendingKeyHex: "6add197bd82866e8bfbf1dc2fdf49873ec5f679059652da549cd806f2b166756", + viewingKeyHex: "f5cf2897088fda0f7ac1c42491ed7d558a46ee41d0c81d038fd53ff4360afda0", + address: "45fzHekTd5FfvxWBPYX2TqLPbtWjaofxYUeWCi6BRQXYFYd85sY2qw73bAuKhqY7deFJr6pN3STY81bZ9x2Zf4nGKASksqe", + }, + { + name: "require 1 padding in last chunk", + network: MainNetwork, + spendingKeyHex: "50defe92d88b19aaf6bf66f061dd4380b79866a4122b25a03bceb571767dbe7b", + viewingKeyHex: "f8f6f28283921bf5a17f0bcf4306233fc25ce9b6276154ad0de22aebc5c67702", + address: "44grjkXtDHJVbZgtU1UKnrNXidcHfZ3HWToU5WjR3KgHMjgwrYLjXC6i5vm3HCp4vnBfYaNEyNiuZVwqtHD2SenS1JBRyco", + }, + { + name: "testnet", + network: TestNetwork, + spendingKeyHex: "8de9cce254e60cd940abf6c77ef344c3a21fad74320e45734fbfcd5870e5c875", + viewingKeyHex: "27024b45150037b677418fcf11ba9675494ffdf994f329b9f7a8f8402b7934a0", + address: "9xYZvCDf6aFdLd7Qawg5XHZitWLKoeFvcLHfe5GxsGCFLbXSWeQNKciXX9YN4T7nPPLcpqYLUdrFiY77nQYeH9RuK9bogZJ", + }, + } + var base58 string + var spendingKey, viewingKey []byte + for _, test := range tests { + spendingKey, _ = hex.DecodeString(test.spendingKeyHex) + viewingKey, _ = hex.DecodeString(test.viewingKeyHex) + address, _ := NewAddress(test.address) + if address.network != test.network { + t.Errorf("%s: want: %d, got: %d", test.name, test.network, address.network) + continue + } + if bytes.Compare(address.spendingKey, spendingKey) != 0 { + t.Errorf("%s: want: %x, got: %x", test.name, spendingKey, address.spendingKey) + continue + } + if bytes.Compare(address.viewingKey, viewingKey) != 0 { + t.Errorf("%s: want: %x, got: %x", test.name, viewingKey, address.viewingKey) + continue + } + base58 = address.Base58() + if base58 != test.address { + t.Errorf("%s: want: %s, got: %s", test.name, test.address, base58) + continue + } + } +} diff --git a/base58.go b/base58.go new file mode 100644 index 0000000..5dc6d52 --- /dev/null +++ b/base58.go @@ -0,0 +1,77 @@ +package moneroutil + +import ( + "math/big" + "strings" +) + +const BASE58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" + +var base58Lookup = map[string]int{ + "1": 0, "2": 1, "3": 2, "4": 3, "5": 4, "6": 5, "7": 6, "8": 7, + "9": 8, "A": 9, "B": 10, "C": 11, "D": 12, "E": 13, "F": 14, "G": 15, + "H": 16, "J": 17, "K": 18, "L": 19, "M": 20, "N": 21, "P": 22, "Q": 23, + "R": 24, "S": 25, "T": 26, "U": 27, "V": 28, "W": 29, "X": 30, "Y": 31, + "Z": 32, "a": 33, "b": 34, "c": 35, "d": 36, "e": 37, "f": 38, "g": 39, + "h": 40, "i": 41, "j": 42, "k": 43, "m": 44, "n": 45, "o": 46, "p": 47, + "q": 48, "r": 49, "s": 50, "t": 51, "u": 52, "v": 53, "w": 54, "x": 55, + "y": 56, "z": 57, +} +var bigBase = big.NewInt(58) + +func encodeChunk(raw []byte, padding int) (result string) { + remainder := new(big.Int) + remainder.SetBytes(raw) + bigZero := new(big.Int) + for remainder.Cmp(bigZero) > 0 { + current := new(big.Int) + remainder.DivMod(remainder, bigBase, current) + result = string(BASE58[current.Int64()]) + result + } + if len(result) < padding { + result = strings.Repeat("1", (padding-len(result))) + result + } + return +} + +func decodeChunk(encoded string) (result []byte) { + bigResult := big.NewInt(0) + currentMultiplier := big.NewInt(1) + tmp := new(big.Int) + for i := len(encoded) - 1; i >= 0; i-- { + tmp.SetInt64(int64(base58Lookup[string(encoded[i])])) + tmp.Mul(currentMultiplier, tmp) + bigResult.Add(bigResult, tmp) + currentMultiplier.Mul(currentMultiplier, bigBase) + } + result = bigResult.Bytes() + return +} + +func EncodeMoneroBase58(data ...[]byte) (result string) { + var combined []byte + for _, item := range data { + combined = append(combined, item...) + } + length := len(combined) + rounds := length / 8 + for i := 0; i < rounds; i++ { + result += encodeChunk(combined[i*8:(i+1)*8], 11) + } + if length%8 > 0 { + result += encodeChunk(combined[rounds*8:], 7) + } + return +} + +func DecodeMoneroBase58(data string) (result []byte) { + length := len(data) + rounds := length / 11 + for i := 0; i < rounds; i++ { + result = append(result, decodeChunk(data[i*11:(i+1)*11])...) + } + if length%11 > 0 { + result = append(result, decodeChunk(data[rounds*11:])...) + } + return +} diff --git a/block.go b/block.go new file mode 100644 index 0000000..dab3171 --- /dev/null +++ b/block.go @@ -0,0 +1,15 @@ +package moneroutil + +type BlockHeader struct { + majorVersion uint8 + minorVersion uint8 + timeStamp uint64 + previousHash Hash + nonce uint32 +} + +type Block struct { + BlockHeader + MinerTx Transaction + TxHashes []Hash +} diff --git a/const.go b/const.go new file mode 100644 index 0000000..96c2562 --- /dev/null +++ b/const.go @@ -0,0 +1,6 @@ +package moneroutil + +const ( + MainNetwork = 18 + TestNetwork = 53 +) diff --git a/example_transaction b/example_transaction new file mode 100644 index 0000000..45aecab --- /dev/null +++ b/example_transaction @@ -0,0 +1,10 @@ +53ce4b3a565aa697c5fb3ea06c77cc9dd1ccecea13062d6eb6d90f438de49455 + +0100320280a094a58d1d0b8e038304ba07ee01d202c102ec0116d801ce0738820a17337a978d77f5d4a18394b7f51db488e0750a1d7783b36de3448336ba450280f8cce284020b68d4089014f80703c801b70baa048001bc099712c6e213f3d4af612ad251ab6113ab2d372e14ada5dc8aa1885a8aa50b6a331b5a0280a094a58d1d0bd001f103fb04bf04da01ea01900b9101c3011d1f88f8a8d9f23e17e3fdc6f016b205c437044b21cf57e795b1ac527f9dd5cc909702c0a8a5040b60c80ca101c20eda028e06dd0ddc0fbb069202db1bddfb6faa63a63dbf85d5aa269f8ceb6792d800cf380aca351d7a88fdea5b74ee0280b09dc2df010be305a705c2089006fc068b09c40dda02fe0fc304c007f8d87f38cfc5f5545baf06fc6c9374924497604413b7a579e00d18301a25e267028094ebdc030be601b2039203b535d61eff0a8b18ff0fd327de1aaa0b0b209585caa385b2e05bc19af684505509f006b05a59eefc1076fe7e7d7917a50280a0be8195010bcc1eeb03d4048c30d302709204b209960117458b5fca06589be976c5185b5f08b9f5f60c8cda546aa548b7afa3ee08cd2145150280e0a596bb110b8204da0365741a75ea096afb045db1065e01e3d4eb65fd63b8d0896b6d178366be439f160d588463e5b03a9030e869c70280a094a58d1d0bf501b604b6024730b102df048801ac0c49f8026566751ea354cf7e92cec883d266c540e5941949320b57b6297546676fb94f240280d293ad030b970eba059f07e20b9e01b80dd409862dd513f42b8103daf286a570841e37683c58d0342f1cf44b8bf5442bfbb9de703e45330761a5d60280e8eda1ba010bc803eb07c905da05a801e1174eb6078409af07a918c08debe40a7afa705a96156a6bd660de5da981c31a5eec2ebb17d675c9e870150280a094a58d1d0bae01c3019201488001af06a904d702d00501ef07b06063a6c667c97d3e7355aaa56f5d87e45cc9da1b958122b94952b995a7df2302c09fab030bb402b811ca03d50334be04119a05ee06e403a824b3437b63ed0d550cdbce557e9e20ca7c94dc5c241638f2589e7c61cf57f546e60280ade2040bbb0aab03a803971eeb09e208e7679e038b01cc0130ceb56bea2d4aa428021d8d6120ebf80d42df6cae882e3d3353472d05e78e77b40280d293ad030bac16af11a512ad09b90ed116b206ac16e20145b628b8f7de03726e195f906a6f7455e279b45bf116684eb48b25e3e653a81b38e5780280c0ee8ed20b0bee05d808f10ba803cf05d70372bd09e6038c01b40d14531686204cebf33d64c8ccf68c3d4860841bdc414bab232e7b66a46cd6b3350280b081daaf140bad0101f01d83048c02b5030f9004f5018702910b311c0ddcebc24e7d54d725b9558bed562769a3db4a36e4ec563d5a10a348101e0280b09dc2df010bbb02ee04dc0441f505b413c710c605940dc005dc0a8ac433cf139f78db1a63200c004c40c7dc82f772ca83e57f73fa28c443ede9ba028090cad2c60e0be006e101d6029402b0028e012b05940f8604a41b475ed1bad6e1b7cc14f23e3339984e1040bf41dfdea91d92972b66a4bf72c2bc028080dd9da4170be70613eb0a3cb507af02fb108704a303f9058102b9d5accc4e4973906870594b5ad97f16a45a802dd276f20af9506c498585e93c028094ebdc030b9701bf06a106a30fb70a802ef209dc0aa402ce16cc65a357ae4548f9fd11bfe47c31220921f4e96eef952856db58ed4cf89f322ae4c30280c8afa0250bfe08d504cf0ee614d332c018c409f909f0079113d26b7eb1b4d05c9de0031306b915fedd14fdfb589cbc4e15d531ea902baa42d6ba7c028088aca3cf020b8e09f109a20a13e101a607e60bb6020fcd02ed1847f8f4cf86a1585c19c5917ee7a5e3e2fba3294d164e0a11080ec06cc5beecbb0280d0dbc3f4020be102a404480c8f13a21de406cc03228707b22ff110ac0e87fc49e2fc857e8e3351d9f8e538dbdc18cd7674fcc6357c1a746a430280f882ad160b9d1da505db16c2098b01bf04ff0832e304f623bf1d86563121501def13ed4da0ba1d1d16dcafe3cfcf87882aeb990f11192a3919c80280bcc1960b0bd907dd01f90c8e0ccf029102d859a414568c0fcd171e6c03f9640648c04ffebb1849159fa078521690a561af00ea998947566c86850280b4c4c3210b3fed10d203e907bc03ac1df408fc068514aa12991b6b342f9398b1525258fdc211ba1499db6c7cfef8d9739223f7d612c171386cb00280f8cce284020ba509e901b607ec0a8807a70110cd10af12e906a0041a03ea7fe56248001714b2a5f8ec45e38770028c574b35feb0861c795b95643a0280c6868f010baf068403b729dd03b703aa01cf13bc14f70fa736a30c068b21594b115a747eec6f7364fd635508dc76c2bcb4c7399d1c4bcde9b387810280cab5ee010ba001c102b3228206ce06d405d806f907bf14c410f53f094c30dd1de99a245915f4a4913cde2ca48653b78824780fae7df1c97a5c1e8b0280f8cce284020bf107a11ccc0b5ac904af0464ec04b0021bd612542abc427d7c35c991ebfe8067db68f5470720b2cd821e1fa5f1a2b00512a672028095f52a0b8703a30596059f0bb50fb825e304e12588249115e30a73d179cd40dfa9e27cd4939f1c2991596f91bdb5b58f98002bbfca49dbfef337028087a70e0be302ae019f0d9615f003b003b90182058506c605b970b15efb3ee06b37a3986f865a08e278544746f73780dfadbb849fa73ba1613ee50280b4c4c3210b88092ca81db8118401d2019615b005b513fe01c51abc51ab789902924ced64de0175a677586a39c12a4f0db51d5925dca5886569020280f092cbdd080b88059104a701b602b105778b0bc0053bd105eb1e47b61cdf019e28708e1c21a99e02ad0dedf262034951ea00a7c1232fdb14529d0280bcc1960b0bbb0b9518c304d53be60fb704d21ec6079a19e90be701b2a10d56c9145db527ac6004ba3b3f368aa9ea39ec1bc381a347658b288701e90280b489130b9702aa13aa10dc039929921deb079816d30bd604c4086dfa6e146842df153f875fe92d84bc3fb3815d2732e54c3e6532eb5276f526860280a094a58d1d0b970116a407ee010bf302d407c2017f36dd09ccbc1eb8324dcd448c13260b34352ef5ad372b24dcd06e71f7bedb6cea206a190280f8cce284020b9a0f9e01d303e4028c028101c90dfe035c901feb071421e9f3755ccfcc1569fb7cc106ec299f45af10c4451b90b5ddce256895c9b602808ece1c0b09f709a812fe0931df09e50fb716df1de020e21b2816b9ace5d720daaaf5d34293b6c8973b6066613267adfa164f4bee113a328c0280ade2040b890dcf0ced09a814810680021acb4993169001c414c6061807a29263057f14c62c7f7b4df632131615ef639f30904427794544f05102c0a8a5040bc802a702ff01dd01941f14aa06dd1dca01a009f310cdcff48bc19a81795d9d72aec9cdb18ab47b73a65a23dff84385cab06478ad2f0280c0ee8ed20b0bc301b10ddd03ea015aa905f70b810ccb02d80d018d3f55d98e85afc12b74011ba68dd2d34452eb157b78f9e3675640dfadcfa1dd02808c8d9e020b852c8802d502df05dc06a604ae099827ec11fc0db3210e5f3443b035bada3624c6d645cfbc432bfb53ad67de24e393fe53f5189a8bdb028090cad2c60e0bb409fe08288b109d08e4014af7044c8e01f30acb66c22f1c2f79d5d826aa85b0a3ba081a30444a553fdbd12fda6c390347455c02808cee891a0ba70f4dee0dd606fb1d8501e31fd7128f04f015ed024050873291a2f4a3c44f4cbcf51e764f1609c8d59475d04b8d0c289cb548543802808c8d9e020bcc0a9505468b0cef05aa10c2039a0c83159816f148683614bdcd4c85acd80691a9584f222eafdc15925b0ebe823cae53998eb609150280a8d6b9070bd903a00a9204a614d2058234f40fa01ced0a8b02cf3ba3be100329027c704f12652919a56508b2b99da4d9cecb8bfcfcfc015200d9d30280e8eda1ba010b8d049403dd02970bbc15ed0bd701a40ff601970cc107952e20e503fb840247a305d39a36aef642d53f292272bb21d141d40117b104410280a0b787e9050beb038105ca20e502d202d301c707ed01c908b60ddb0443450539500506a9bb0fd5b408a86324ae2f195b20bfa1ccefb032785d3feb53068092f40102298c6ce060956751984781bf5b9ced27595082232ad48aec2cefaf6f010d5ac5808ece1c026a8ce1805ba113dcef4985ffaa36837cf8d84ad9f6fcbd515ce5030123be78de80e497d012020f19c004a21f85e987ab567d6d1c484568cf05176debcedd8649c9ea48ca5e4780c0fc82aa0202fbaad619f98d23e216357211cc7bcaadd244b33a0e4febc911ea0381530adeef80d0dbc3f40202bfae014409db5bbb21cfe04224b42a6476697df719ecc8b0d8ac65245c05482a80c0caf384a302022898f95d657d0fb76ebf551bea861d63657d71d53887df7f2aaa455c46488aaa44022100cfbceb09619f4df80296d06a7213a1a8b2604d62b2c418ae3881dd5edd08634d0169846e2d8735844e453e3474aea7818e17fea4d765492d1b40dad9990092b12c6a0dcd4e938ca29e42e4b34d175e102e9a0772544076f3389f0487405e750c03ca593970aa741d1e464ca6ae500d5421e0c10d07471debebe61468ef386acc00d6ce0bcae2f8f0d268f9ba3b1a08b52c352a4553c75c0a17ef6ee4f0ebf66b0033cddf3219d7efa2d931b65b204e277c1d34285fb0953337487543a12d4f920801450504241e5d8aa00fc9ac7649a783f4caf3252cd25c5d83164fb817cd4404e1af639cf9623391a1fcee5cfa9cdfb2b405280f507fe5bc07203cf4ad693105874aeb060ec0271f3736cef381553a161df8ff664631a6d9de7dcb79944764055f7c6196725145caacb487bb8fd1f26c973fbd319fe2c0574a46ccfd71d31f0fec51ee4e57c717039e855dd4f232158fbc9eb0e12820bb516ce273533666f20404759f57adec7ff5058af92ebb86290761a822e2f2dc702bff43b3fd5499a00007927efde8ed18cbf5a60570f2513e6f0a57c8020a0c98662bdf93cb9abcdd06ccc1271456b98d75bfa302f8e43af99e1ecf40ad07433c3b44d6648212554809a39c050268acc6b6748c6ea10c5a3479f352f9d4232c6d8c1756af71488c950236540a99478bfb4db3e39eede2aec4258ad25ada907d2cb698943a1b18985406d52de9e6383e38f7c605b3cca74baf64b946493862a55f593fff9c0c483e80013e733547732d257e3fdc7046de5b16f8d20d4a2c19f3ed5286ef02af71b418054287d6557b467f4fc87185c65450aacc06a362527b8df70bb65ee56f9e6e490478340491a200f62429e3c9b5f548f6f15d15ddace34882c7fb80e7141e46460e11e9176047e8fc9807044001117f06a304a17f29a95eb055f398beaa273c7301f0c448a3b727a899ec0a1de0a88bc27e196abba2491c761c5d5f84b0e7938b0d37910c71036b605d1ab66817bd5b8ab9173f01c149069f2db090e1e0485b4d03e148203033f7ee282151d2ef6dffa070c1e6725d7aca0fbf96de0641ed4bef003c404f0592faca6b668c8b01447d68f522740799acfff075ee6f52efc3f9d3097a5a2831d82b7cda9967c61d2b1efb7f70aa2cb69e705ba79941b549d0ab82089b7d4efe47c77dd9e097a6cc3089cfc5b9adb80572f4f05a7017763f7aa9820bdc62cfb869d76de9a8e81392d69e38960524395ca2a2cdfe871aa47aa161800d47d687cefda3bb10d8dbb12b274f963a047d50dee1c6fc302ec81ed4b94fdb0be0582038ed01d05af131a1910ed71d2705743cfb7189063924ce65b5c11f3000db6dcb2f99164483dbcfc47ea5bccf58ee92ad7db808a4e05e7250b24145470a4c4a9ceb171844a84ea4992001c281d258b7c175b6bba6c29bc3b0d9a395f20c0e96f924b35c7f01397be858c35e88faf176029a8e50ba1542604713905805081acaaf2eab50e4ba143ad2e6fe45e1c970568efd4638c90d8f4238cbb1d006084da3ad6a68565556f15d8dfe159fc13f58ed4c9e163e698a6c080db1dd85460680bb5a4e1a3aebf3bbeab1559fc8c5c0748252661a744fbffea38900f4b9fb0ecad72471fda1ab42c8383481204ae2435aacfd1ed701bda686ef27a32df6a206ba02337f7d9be4f53e3e06716dbf64d06a022bab0c22635c46d7f52525bf010f0859668522427300212d7b3ab0c994cbc0e881be3aecc75502b7cba456410e02b122c80e4015618508bcefa0e2a9be929c211494826188c4257b1623ecc89604754166a933905ea4d95b4a85d0249f38925e3f4116001500be4fba89f2f0f903f325da9e116914f8152a45ca3223040bce00f5a46a362e900d8d6ad8e07ba409417918ba1fff2880a22c64af5293fffa2e72ffcbbc9a34bd4866a499c1c789000251c183dbe62db54e65e1e0a69eaac9dc40e9d222aacd39b8a68d2bf4d7020d0309a872502259fcf837f883a1b5641e15ad7e684231c260fb0cec43f6c5150b3c7f8862dd5e98fabb4666b064df08d55070135df323b56d65e2d605bc8d6500e18bdbcc1985075f24f9a21fe29e1f86ad50c76ab2ffcfe2eefcb5b479e4b909dbbfa023c535c621abda1b950a0036270d2dcbedfccaad999575d8e93f0bd4048362c94a00ad912386405bff79f03f4a989a64e45790b9ae9f211b772fd01f035b7fd64f4c7ec6458b4f8a5d547b5fdc3e56baf8f7e4a72a32a100df6bf46b04be14d7b690be15fa54f5c63c33c4a8950acaaa216a0cd65f01d2f9697301530159ec2145917dee8647ca4dbd9b9f0ade5a765e47dc31868f44edc402ca34e201da82cd0ab78cacdff8d4c4ba4e317619fe4a9b7bc8aa85be3a60b03ba6184b0acf7313d37286a02f0f7e704870307edce7fec0ba6e78825f13404513902957099fa17ad2642de6e7c0900f32788dad15e374e84eaf27f27f942e40bc04404002319b39b729d85c342299627c900e44b5116adb00dba96d0cfb319317d1d2470f2ea97058f97a2d3eec62e111c01c23caf7da1a476d784dc7d8a66c3dc9d84803a13b056b1d56ccc4a39fa62b1fc487780dc2572cfd405ec669ba20695f408b08e7347b4ea728864b6521e223bfa218d8e2afedcc303ee163a5f923a73e26f80b81b06fe6c9f131999bd94b13c415bc09523501e4de7a9ef8a09cfab3b812a407161d024702ed65ab150ec3e30531d4852b3af10070796bce7258d7fe04d9e90a60a11202ecb7489d1868149f08bd58c712ff952ce19512bef69da88c756e5c088fd72ff876b60cf23cb5e9688b688cf5067fe28e29feb58e6177c37a0de6480a4b5815bf0e224838c09c23f2c47d82aa81aba74b1eb34f49b9a9b24988b93706309c3cf3c9a973b4eb9dd770a4c6a5fe96cb986f7ac4ca7086f7d1581ebc9101555ae8e5dac0f0dea8b3e2940616ea9bddc7ab6d04f85c9a0bfee6d76fa8b90277e6017fe7f3dfd06f405b34a3d738cfaeeb6757a491d9830c26b96438ecee048c55d656111f9104fe2c9c099352863605c621af88b07d6697e7c9d95c001c0619505bfb7bda96a5253e695ed37f73aacf8657ccf1b36619c002b8e8cac4c0064619bc51bf16c071647a1cfc0358116a3bd55be6a0422c275924363ac5dd4c02c718053943ab5031226ca6e78bcfe08a30a73a23b7de10ff4bd77a7171d2020c0f728ce9c177f300df5cb93fc8067eea986917c2a7b66e103a85739d6202070ede5ddc3af520fcea9add26333e4e593645247f374ba58efb8dd0a1fd7eb6330f516d5e390b105ac00f5d47a86f92f7d8e5e670765b5d4843b56f99d949db070c23a88eb899712e6fece332591acc5e273b656b0977523908538782dc551b7f0e06888b0795846081fa2a7b916ccc1ebc6d381c7dce33600f8349ad6d56ad550b8f7dec2168a2475dd9f51963f0a28c27be8269d6781682f1c1e93daca97dff0e741354b27fe1b4e97a84fefaf61b4a7bd2c3c2c09defe923aac1b97664385c05339dd0ffe49c43eb78eb90ed9f8141f2b423695dced1ff738e53d77a41f20a0e333e966b98b33fda58b83051f9797e4be00e651d028f5713ae7626d31a347306f0fcd2e65e35d1b5f650f5507cc1bd78f0a1dddfa2413c6934d633ba9016c00997aed52d0f8177f9111fdb060224dd4613e6ab8b02537ff5a2139f9f0d7a900f92ffe9f5c992862900b95c655e4f523dcf8e3f2619d3ed2449d05cb6c1fd140a016a6a16ddf97c78debeef876f6cd0fce3a92da23e6b77fe9817b54156a9710e0446d1080f59f9ac0738a6e799da864f92cd6bc2463f65590bceb4dea9e3e201cd87351e4112aa5b6ecc6b61655a4f795d2b201a496c4ea3736416139e9fe50ee91f79b3523d2416832e711fac01f50ae3bc479c2f62a7226be077009d476507ae6d69ed59b870d5a096acccbb79efacea1627ebce3a52734801f05ed190ad07699958868b43098498d4a2a6cbc194062a90d2a00ed3675cfd241b52d08b3c067b3f4d3007c0dfc3f49591497709ab2cf91aab2314e348b184e14b154e4c2b0bccb896dd2bad01215bad22b3b8ea46f593c811bada6efd006413289cb0844b0549f40b7162230981f55aae00474a1dfc9b88d4d4d73c82d47233bce2a5e3bd09b8832adf236068e9bc9c14e84c2eab2ab4a7e38c5980c66c5017dc22550f0c01ee9193ce682789b08dd3a34f58713a1bbf28e51efa3530824fe01a15ef17a500b8c26fb9a4f04b96dbfde313a8bf553078a76c90d86f74195666dcf96ee6c30c3826b0cb988deaa55e0cbeb7038785eb02e5f36296351ae481d73701b2b718022b4e3ae882c99ccebdac4a2dce1b1271b7371caf0a515ce60778221149e74c01b57af115a1f988687eca3066724acb03195d7056a35f458c1ef3fd3b7e395b0a628319171751aa1e36d90ad776df87a7ccfd9d884663c17e54e784c6fbd88c096cd80dd38e88a27406e5f7e3d7db02c343a052315db9c4f7d13fa91e135c030b81b4b1d07fbb7a2eb71e1d0ca19ff8953dda87a6cf8b09044fa0ed934b914401ed6ee0a8ddabea9a41cd6ac043e8a002c1894883c7d58cee62ee879e4564440607bb71dd3c8f742569635f535d2b367eaadad401b1eff08ce5b70c14e2318f0c645fa2e2ca52b5a481e568a8257c98af8e1b5fdc700ebbd11b66e2f77d35f20fd2c6fd6bfd61be0d008d8a70c9b97c843ac1818ec62f82b1ec6c9245650bb70e504499ce364042f2a8263e8548bfb39aed1f82a510f6261dd0744fdb5800b90d41cf9317a50c3da4a3c4c0f3fbe9c4ae2ab32aa9a68500ddf55c8b3f9dab1b0d69a50ff0b01fff185988de23958fe983f315521e9a8be8f2cf7a2416f425ba0bffecc339e72e7ec4f3b5094eb12f5370f22548bc7a49d5c8df9b611dff9e7f014a9bfd8ede962b10376f6f97a9e63ad2cc91249c20f9748499960988dd28890d537c43f430cc2d9d25667058789d8f234762bc3e4cc267a494b56b90fbe126045cc122b6a4528103152b5772be16c913646c8a2873d2b36bde05c3f580b6100f42483bf756eacc7a76909403e91c7e2eb9a853899e36ca4d653a04e1a620d002d029a6f691182c3a6e2f74447147a56175bbadf5ea728a89c2d417a0e904020fcd45cd89910a7a95c92824365e96fe1e7d129c8f4096f3e4ecac80310250f104e9ced98f807e1f8816496e3dedb594e697f23f1934b92e51588b6bfceba2f308de21d76d2723d085a2441c4d329f6301ae106afb778a9f3d12184d26b92570029c60c718fb0e3308e988936ac88eb97bd90d510e43aa7eaa2db7bd930f1a8f078caafb24300e130f44eb2ba919875fdb72a2658fde53717edbc250824940300d1507cb5f9b789b30f35087a0a3cc6dc201bf87bff15a8583e948cf6711616f0e12cdb82918c430f5a6c90a5d4ff6c579157d59d326403c85202ab1ba32bfad0c17101b050267cea5bc80f757bdf4bad6b0098bc478c4069694c476ad55b9190b765e0d549af577724e8f8bd5d237295827c524ab18c78c9b9fdb499c4ec5b30ca611f3954f33b0f1dfc1c2e03ff3b1a8230e5741fe4915cd17ca9ff6779eb200531e15b7bb2992dbfa6d9ead2767e5e9841dd617b537e4ff794d0eba9c59970cd7e19a5b5616e2db53033d27eea725ecd4cc69769dd436a4cbf67c9cbebf28077ff011c3de057959cde5f11e82ca6a60bdf6bc7feaface9523314a877aa44407b7bc9fec07050bf6c1af46e0f0eca56764e48d628966183600f403d88bd91e0ed5023265cae995736cb1f59de4fc5611e336a29b63f2668d223496fd53e6ed074b3826406b11ac06d06d6563206c818699cf3e0299e908d184db80bcf67627000f5a5092898a0e0b2f489d142c277d41455e7bc4de17730e390167507de8c10c9fd15c67cb07726979dbdf1b66c898d92b26791eaa1df8c0b9559cd831c6680a36c66c2dd0586fb56adaa62a5961872e104f9918d9737bf9bf0b69cc3a623f061b32db1c82e981874457ce1c9a74b0df3b2b54074e0616d865f4cd9e8afc300d1ee8e882ce5b06a967fdef6290badde715617309ed0ac988a7e96e224561d105d94318042177efc6bd3fd32945441cf0fcfd6c76accc73c31659469351c8510371316a803383a0a332c496c01d78a067826a9aa15cae571f8dfc25d0d16cfc0b0e68bb78275e1274c098a4f4a762b0f5d546e95231b6eb3553e9d4204aa12600118397ecde05e3646fcfcba539e5fc8fc6edcf397d0e9ab974af6cd1f199640fcd206a75c89e25f993df4dc309859701fed33826724841b0b9e4eea224d84108417830c48c546aee0492dce7f8b194ea9ccdfb7d060515a43fffada0b87e810f102e46cc3a446c68f15ec1c88992fb1f1559b0ab9f0d77bfebb2506fd4ce2c0e992c7de91602a576e84325b6eb4313b0c2018978c67a2e3851c12d6cfafc76061f0e555919b5b95d4663f5f207dd9c700bc60b2797d5f69e182319d2203d87080c6fa1bbfc6143e1274cb67ef8245753e890fff17f061a43ebddb4789330c80d4f4d547fcbd603e271e2a9f4a09adbb8b98407cff4abd33a1497670225aae706dfe4db241e69710d3eaaad8a3038038468f7679421ef83a12dd53ca90a0bab0048e344b7a763b3c3c967df4c8844128d369e6efeb6408a407052b589a28d6e06f2ba6f6c288c64b20d322e1f82be3d00c5862be40e8688728bbc040341feab05e26a200fc92c7fa4311f51d5cb0ac6d539adad852c36cb607f1472b0df72bb0b47def2d8dc1c9ded2823e21c02594034a365fce8a1cda543f70dc3b1f74931086b6a2e3e9836afad9c5b424fc7cdf265afaee5c331d3de7fc65101e35be0940ed09c5086e697431a28acfcefe5fa4cf0a93db4be8afce764779ef0206e565f04ec69ed13f48300387eb3f0bb0d9f19139ad13831a5a20c0bedc9dc86d90396099bd6e18a9bb4fe4f9b8a9d495c70606f05674bfcef801a632246ed422c54150250506f3ed67f61900d1a192696e1c368f727ec0962d932d05c988674777a7706877d976871526e897c440415a13b59f787e947e22030bed8588fd40325cef90516e91a6d257687b5a31d9e68388d09ec14a7d6c98c7a62b4ca6ad02924ef84053b1113427fab34cd447fd5b6f416b9968ff81dddb14281f37fc65270058ae308b838aa85004ba91f441c874f28574ad2b98ebceaeea29feff2faf4c6376e6809c4d871798c4ee576e4956f158fbd5b5405e3b68a9de6de4a1b2263c4e00cdf0d2fca3b1b80c43b07faed51f264a0b38e08a4b811f248dce25c3e451d35ec960c6c88a8c7eb3cde743c3d920690488d424a9f90d50976cee7a7ddd8f362070c02aeed5ecefbf6d0ee32855edda0aa8be128b82550549ecb05ef09f67c664ca009cf827bd9eeeb7289739bb6a50f783bb11035fd828f190f16b128f461c77e7b0b7c4935632d0e76c313d8a18828ed6cb5a9f5ab476e738ab898e0b2b2e4d635037a6d2087cf178c0e12e93c6b1b34f8e8c33f84f668f1ea8eb23eec2386dcc00d9ce5a132256af1129c6ece0ac01d37c9b5707eca846f9992a02dc3e80a49c902cfb43a40ba7f6cd02db21349634f05261d687e8c6697150e10a670beffd8b800f76431111424ae54e71786ff91c671bedba2bcfa40e1d2a557a42e2e14b4920301fa5c9b249a9b694e4402b1220125417dd9763fe602097b617545d9f2f986021b7b15784e416689794a67fe5c20bc8ebd0f9de0904f14b159804752251a3001a85d0380b06d1f9a3a39d901f6efc969e36de399385a3a9cbbfdfd673d2ecc0e1a4175a8de57ea360f37e878e9fbbd3cd1ea921e53e9a08662a8816de8d4c00dc41a81e9e178904a243d235f05928c17056aa265da5ad0ea424c4fedf11ad9058b41208b5fc1ac621b5ae568849a805024ec77cc4e3ffe46e12a839579ee92021c4c8bf46dbc0bad1168fcc38101f8fd9ea9b402aedc56fa66dd05bdd49f160f5a2e683d12508a290bee3e04bf5c20e7257e45dae2fb569599133f22279dee04fe80c6d328b45b325485f6b13cfb434fc694dfd4e23cbfba4887756c30928f02146d598a3cd7c7d149007801cd8d58b306e17a8efc4c8af3aac9c382e383ab0b0876657df24e07023db8200f1ee3c91b17afcb5b2d50065cc732c7269722eb0f9582630a778a0242780cf82ac5c883b7d50a15b429d5b89d4addb79819241104f7e3ba2b9be4a1eed8b8b02585d88e13469e480a86671c6c05ccda6ad792fc03470dbc21ddaa125b9ca30c477d577b556059b3584d3656eac8c98612f8a13c009aa93d654a6248b9a1a0fad3915e4644d219064e4085b50311826a86ff9155058abe5be66d7be3b8da0ddf4015e46ef3e71540eede695e7500aefe7bdc3974069217cc4a77b49b8027829a8ebbb612115c174624e01f5b1a63a3ccea731bfa0ccd7f65343f56c150529a559dcc02f27208c210bec3caa62a4b5c6d5c84f3ab0fea2f0027390cbc69b7a6cec9cf2aada471d52d9a9493698f06eb2dab0668600c8b686ce540a7db93eb78884ec28408d7860ae3c2b41a870c5c03f1d9d5f43907bbf697485ab49b07ebfdcd6e15dac6b9ec05f9530b6bd1baa57fff1905006103b27169eb05859b63e6e2a0b260b03c725221d96b4664b43725741622bf53830418d8aed8b335f895853438f165d07b7a8fd8a546be1e927247b40e3d0d042c0c0b2c5634f554dad27b64c475b856c0bdaab04cf4c24c670b704b5f30480aaa024b67627fbfab215fa804bd66105348041ce724b8b6f426468d9053ca2258ba038e73dadc56bd2e36ca687096befccac06e21ea13d53479816ede71f1ed146003ce970c031c71a8154348bb139072c039c171e3ddbb0f0122d6c8428218a5ab046f66003eabdc2dea2a9847a8edc68a30968d22d0ca1c57ffca37ced0ce6fc402a3e256313a21d22f445c978840a8197890172f7959cf63221659f4c57e526f07dffde7949cd19b0e1651c1c4ce311b41057a324c6c35e3d6f160020991004e0afd17579dfd424932818fdc0fe4b902ea7f25ed972a9c82656511cf896ce0d809e6159be7029942c685b734a739b103267ced4a23485d5cafa5fb586d7812f00a69f3a6cd76860a1312e10c3fc2cefdea1281c35e59c41ef82189fe5c4ab40c0e4e5b1ff4db6653231d6e3a409d410ad9e8111d349ab5bd426c4adc014812440c1fa429dfb154161bc0eb6c8272d414e52e0ff635f4df0148c7013ef61d42190b1e5af3ddcd74ebebd04888b5c0e69aa8e182a6942aa115d62376398cb0812b0cf5456b753aba3d0a4cb1c584c092578fdbc0a5dd267e4338c4b217fc66230e0ec163afd9519ebd2fad336c6380eea97fc370fb3ba1a1e112e4e3f2139b78320285f0dad0d638c0c96fec41b0e847c4ee1af7ae5c4f8508229322cb5fe244a504d7e73f4dcc475c52f36f088de04045186202893db5079b417bfa8d52cfbda70f76a66d3833f6e2e571147be765b7711a161870199f041d6c40692c6db7678e02b98749ecb9ed524ebc8c1f5543f55ad495fd1fec5700cbf34f0f66bd7b42de0af4b324887f456f4ed04d823835b3c4287e8091b2a0f7121268803b8e7cab470e0a3c5b90cf03737a6b37f429e0c97909bf50b43b68f62bf0c59b60ed947bf0055e57bbf19bf315b7c8e800ea19b5bfb3ff2410f4b01001b38d2701696e0c4a0e8d3be3bc58e8b92485716a9232293cd6cdb029b5a17bbbb2538c7b42afedda0437291f8d686ae07b5db356b6ffa12b34a9c75c466cc9066dcd32562d0ab32f0a029ec480880e9c2441aa124b37e00a412266e84574b0c77ad0f1c0fc4288d4036f707c19cdd1363193307de12e92596287c529a25fba2b3d1aef78e19e156f027339482d190f9bc158c4a4c54ab19a35c59aae79735ed55094fb1825f1c0220c6ebb33a8a808768d83c8db456fa7d39aab7de61a01bbb7ccff15e9a1abd3c80a9c2fa6d867e73c4ce1682714cecd1f51c3e6ae5370b9ef64cea2d696b86c990ba3c68acb1e717050d401cc938f4a48ac5aabe5b66340339688bf90bf46d8070da888777c7e06b9b2909c9439a5d34b46ddde0ba9da472ee8dc7ca6147f84e70106641c7da5667825d50e6881a8685d7d641011b2fc4c5e13e618343fc415ce0783cf3cbf1a0bbe8c71252126bed66e3766175480702b0f93f2ad970891e45e0ab3cdba6451969431984aa7871f63f37dc3d1d1a8f11f4012f94c0dd22580af099e5e754d6f52d90d39f6cccf5f789ac90dea81b321674795713bda922613dd0c87c5e7842ee57859678b491018952c26c554c39455f40441a09e897c77fea90bf2a0e1e1de0938ed8a6c264ed9e2014f04f83928ccdd8df08ab4b55cf47fd2014d9df27dbdcd84bf7a01ea350a685118aef85f44c0998be5d60b322a007e570cb66a44c1ad4ffd989af6d1ed8921768f67a273f37df0eb83be0335530c2b990781311897f04fee754d7f8dd766d850ba42e01737302b0d3d265ae787b977a4074db3b8917428abfb674e5b1daabe54c59a1e29a72d97936bc9e4738041e30d02e2973484ef9b4db2cac3e07e33e92119c737b63f9d2f6d69b77677e5c8c4030e0d1efcfa5c8cd7c499316dde6b8208c61db3fdcbfc9cc4e7590625e0906918041aa2f5d59ed58c6a60dd6e6cbb389ee61aff5a0381ef0c59233806dc0491bd0acd16f65f3b72c9cc4a4c8090ec3095f6cd9af91bcff2a35dcd798dd9fa21ef0c06abbc93bd18c3701e2bf96a2d61d4fd1bbeefd42006b60aaa23e22280a23f010ac8422441dc9dd98463a93631dd4cc3b519183233d69aff71bed43c7a98c10a66cd21c5ed06b47dc4346a4c62d10cdaca8e57627e565be477a175586759b90d94147b187931d9003cbe1ae05509d055214cbe2c4b9d1b7d03a04559dcebab0c38654ce25f78a3efb41b33546d0b25b68e031b2d2c41aa3c4b91bf76c9e399014b282e8aef896c9dbf1fed4d7d444f76ac022c9ecf9243098e08e46d9563120973a1844a45e1b096ba4ebd8b21f34999a79ec1cf1e899e3767ee0b6b06731c099ac1c4b3d8072943c2afc60b66d9e5f04a9e393b18dc877f931994163c822a09152e91ea5a5aa0b5344bf3d715a41fd3a018d43e480e4d4993419d4d1629ee0778fce8ed694d6b05c53b2831953571c7ed23aeb6326cc659b2c3794e3bab050acc63f6ecc275913efe65b657e0fe9878eac97402a7af3aecb2236d04c739c704949e7ded4d50e15dad9b5daa13d83e59fdf371deaa8f583e0579800728b2e30e6d8b0a32c07e146783a785f445ce9ab2a3ca324efc54ec67a55dd301c56a800e7f2d3b7c52e30ba94ef059cbbb7047209cf55485abb081f17bc4eafe38dbc605cdf46faf138b6515bdeea073e5f2b338b5be44f8cbf990bf55a6688172ae43022486c60d3ad5b91580288e50b8687d9c96ef0ceb573a3ba6745d3e40a735c60433356c5e48583f78ecae3574cce6f26ef787f088eaf040079db08f41a690ac0534887000582cdccde6e7eefc2e47090820ced57648af63dc9b1c518bcd73db000f3c43ba6bbb8593fb3ea812e6a7610ef9b3e518f9fb292abdaa0205501269019ac0ce0ef4da8e59bc8241e6ec2d7868e77010c6d8b71c4cd08b559c98830d0b4075fa7f3347ceba18ffd5a60e65e494ec97ca25775dc2f9a4d1b90154b26a0b368144d1dc539630bb400f5b197d171049626430ac616257166c7e83c44d9506da904ded7f067c0f15401c069a485b9714b7d548ccab1c62a9cde108a07d3d040d4bd6df663161443013f0b8a5d03dd063c22667763bfea0710c8f5e42308804e66219a9c64770577c53d650986f4a9a9beb52f153a04ed4d6330561b59ff002668142129dbe25d802a1d7df39247030fd82a1bf78a6a026fff76fac5fe02e0b920804d95b6715c985e95339a562c3b44da54a4d1c2bcc7de781fd7604460c0bfdef2f66e497fe1d1f009140814a27082547b2b0d333a3ff26f6941b5e1e15097c366ca9b1313b6da3d0d4dd8bc7b77865fcf6d45797d6e5a26db0114eaa56015334eeb02aeac505e90cabc01101019ca111ac463d0d3734500f6386213b3f002967926d8222caa10daf80cb18732be6cbcfa2d827311014fadcde6deabbe70d37ac582e60cd6942c28536cccbac3217839a8adebbf6356e913267b352477409fe006e676d31d8d07d969ed746583baa983f27ad87afbc27e22db08e4f931303559ec3ce5442a301562175d369f1984eaa1bd5570725edf573e2b4ec326aee01bf5af3c9e1ca1a3bb9502fedb9164f075021b1a8c06588193716e819d95c3d0bb01ba9622f9f04d3fe10f65d044dd3cf7642cf2c75538f1ec8f20905a08eb60fd44749191cb104493073d164df943da12799bdc4cb97337efaa44eaaedec8608aecbab8c096aad5a18f89334b5b0cd3fbec4fca3eca05e3f2ffa65baa5e77b01658466dd43bfbb843d4906f27bb2d2c306ecdab34eb53f714b4dc8c88332d601fe9e6b0e2a4de28beacbeaadeb81998aee453ba510acb719c828a7bd4201b80269a715258add43879d700dfe10f99ac42320049e21a44532232a952107a822053e81cd6c893298917072dd67867eeb352fdf4258a8d2dd5495334f35c8b4e9042e3ffc6962b87ecaafe9172ef8cf10d212d2b51e92fcd584d551fd99d4eef60dd0cc89983b6e572967cc2c95c718c247933c99a87dd787414f48f0f8ddf7c9034f2c088b7e154b6947c5f90186045b20174fa6e4627958fedd07d73c47ad780f3f26ab67c5d4f5d11cfcebc3e53138dcad21e687de409e5aa65ba9ea22946806e845ec5a5ed1ceb2213165c978d6bd72abe1d95cac1d43ef4e2f00f83ede920b7c2ba338e4cd487554b27e7cbdf39144b9b9e81b9d65b07dc88bcf94518ff608b7a7d158efd275bdba9bba583a37df0a0d3aa75133d356444a05900bad4c2107245584fa0288c5b35683570a62c260b06de23f324bc6209d59f726ac2c91be03fed158e1ae4d8e64f4da1d1b5ac8457abbbf01cc6c993552bb1a082c71b667001da8f6ebf26eb8960063ca2557114726a8f88aed28791f99fc15e9720ed4d803c0a60abb136712128d1be056e5070d7d11b70e39b75ee5c8eb8cda9b3098020b581862ba7bdddb4267b1423952ddb4401ed81034542bb54ced16ae2116cedd00964393224f8c4acc14f552ae340b1e550448e030ec29cf1777f111a264ee8a0dd51177f59a2cbbf07754ffdc807958b67a770ac0e866769b9c403b848fe64c0049b61c3c40d6457237e5e4e0fbd0dc29430baa99daeee624348a99a2211fa00c1303f89950c17b7fc397ddc12f7f7a5576b3139c1dfb3d14b8175702f3a99805a3ff0347473b0b42116fa331986fd9759ebad2215e2c327fb0d52e541f489b0c46b72dec17de750442e3096802bff4e8e6682a1dbf5bcd93b82e3af523eaf9044aa872ecbc20240c09d3fa3b98be2e5fbcecfa05f217f2209c99e288e052040011693899424a82193f8dbf21e95b820cca365a15be5c90d1cbfdce0aae422c07d77e0a2a72b1d35de9ce2469e5809fc091e9646740c732a858d39370e049740b65a11832f3bab3510218e6d7c32d7190a3f02b29438bbab2c450dff904fca101ac4c8686dbd09913a3b8c8d4c89f93bc23d562a404a1884d146c0946d0e8cc006e0b431f0f1f9630d8520ef8012b6e9a07c5ec8bbabea63a1613c240a040ea07bd4b0707f095e067c06f1338a89304cb5cd1d00c13a0aa94d1e566b03f09260a237f126f1dc4df8596d91771b894b9fa183106d2d121e257e5f74f68acafcc09eaf2307dd0130e1188891b592e47838cf314ad7b817df9f90388aea4d4c5f10511f55bb9ccc213c17a3b619c603923aa3d4dfd45976aa71dcb91f70b826fe90e8e44cc9a6a49a8ebc59eeeafadb2158b18b1e98a07de3ef6afd046d09b837a0c3e473b8312c66b1c71903f2bcda2ff59bd70f6dff531f02c6841db16b4c26b0b1827fd8c9fd87987861940dd8acae94893fc9bea229ba0e5537e5d7a700c1705a8a3bf13d0c70bdda3362e6b82cb46397c5a2be12d8a3f1954d3212041b57d082556bd2fb45d9153be3ed2a0565d47bee53a8c35a5f5f1f3d2bcfb9ea560d40de39268ec6c66962b873c71a26a6a1730ee461fe958a34bfb4de79ae9a016500046e8ce41f6a9ae3f5ae4cf76fa0da73731f7bd6c8e2fbd6111b9c05c382db804a10f857f32cef3aebd7639873ca3670921d8d20ac530fd6fc875c216b9071b022d5b12ac8e5296a913795838ce251afc2f8a3f6a87f4d0503ef7956a508b8e027b02b32da23bec6c5598487b205fb8a7f3553f1d7292331957b3659d9804420adda6b703170636f52b77456b941cb135df8a52ff6273c41a2ec8ae719030b2093a91c1d48e91f66d64dda3e122d6a951c5a7351d4638af78ef9fa7cb997c660dd5b2aeb8385973d17bb06d4a4cbda976582c5a3629ed6343258162dca22f41026f3a4e629f1766b45022d740be153bae9e34538c98bb63c4c57d562d3c1e130e00891988748dfdfe7b29c2388c4e3768745605517cc91530c963833eb303160da9fc6dff5bfce5e90a166a101b9896bfb493383259bd0b32a15954c7dc184108b1dbc012da1b56508f450f790468d960e3ddae76ea5e3b109cc6d37fa26d8903c27f8a2d0c9b55f41abeaf5a8dcfcf46f0f232de34dd519269a6d3ba99ac8f08512c362b1d3f57104e829361d8b99205e17dfdb1ebeaff395710af5c81af9e0e57fd0d9f73fbc989a170142ae3d0a6226397fafb09a892542b387d25688f6001082a5b5eb158fa40cfbb34a05037a219134d21ca69a58eb5f2cbc7febe244a02b7ca6e6fbe34e719b3ba98b28fc3038cd9fe07799c5e355da1c5123c3a7f2308aa5cbcaf5a00f203ded8a78b8838019161cd4f394996edec6cfa1cf043958b04747b7626e682ca4e95ed2d304202468c17cd55141cb62ccc59e2665295da680f0202bdf437a6b0245dc9e3d1e122ef324feeb523292452f6828cc4c462cc6f0360089564717e7594829e0e2c3aeee7840f4273e80d41388a33e2f4025a04fe07d52e6f0c43327b7fc7d6e0e5cedaf5eee146aa8159c23fec524c0c9f0c4ed40d8e051e40f7844d240256fe169cd9f0bcce237f88d6f4ee7975b4dec6da84250f4cf43901d5a27dc0a86cce258b019bdd0fed7a4926846a9f82794ae91a51c9092b00862e0ccf9cd74793c1b57f54afa0370e9e87a74aafceea2903272e7a43072c414c72a5bb412390457ad724733baa11c19eb141a822f15a603ad53e1f23079f439eec3c76c460b5da7179c5c46880ac97c44eb8e8a43a8018dcce460f5a06463a226cedbd308f3591d8082a3565bcbc1fbae1516b43fed2cef31379571606562f87fce3d183d7819463c70c7acb596c30bf6c85b7378998b77ea765da370bf40e0e3ca6e674a161e8652d67358e41c05de354def6dc1b6fe4b91165cc0f0fcc539796e9f7e9d7d65d77a936b0658f18d88dc65a43b8d73176b73165e6970ca6e9cd89a05e9fe130301f068a6ebbe125ca33336c97ac398af18b3471c7900041d019932aad060f237688e0334a9341f30bb2d9293406929fbaed2e7f9b28086f43b5db1a4c67a90cfe423c4693fa0a8f9bfb05e4820326aa8c8a3c4b269403059b9cbc83dba6a0a2f45119447d171634383af35f7308c9922f92127c37af012baf6bec3ca7e5bdd1ecf678a50e59a9f28fa6d6771d86cb023e88e3abefed099b11874b6119c125b4d9d5aa2ff4ecf83b88e5b0720ea3ad909aa4155f19450ddcb5bead0659c32d5a0420a67e526bbed94156ae7b40a19230a85bfaafb3d50c705d35ab9d25141b1bbdf85db60ce2daa90e52a8540bc537a92e3efd218d43029928067babb50da997688e81d7a8e95a62ddc8f272c7a71360f93e779db0d606fa7b2807560a8eb294472359d9e6d20ccdc0a5f83a3d536c984d43b3dee7c306ac1968d51fcd3fa9e57bb23fbfcbd5f96b8febb24d2f5c85c202efaa36f2cb022a987c40bdf26738480b5ab4fbd3c7809091aeb6d522d66cef476fb2b380a70c29695533cf9c899b26afe05d4d8bca0ae2651a19ca1eaf14f6a0344e238c400f00b9fb9c363f90b3c7c02b788d82684d8684dd1d3374784419d1a49df08a960d9c60f7db7309706fe4cad01af0b5368728d82437041d4c6672d1a2c1789cad0fedab3fa318632a26c33cb5b84a39519e4b98200dbbacd9f878e404d6c593bf01ce5071109e3af6724ba4de678fa9e052ee5716fe853838e1f866219f143dc50bbf367d5e90534bfdc36859e0b0816f3c8e27be46dd0cee1a21a5f51be22b080c5566942f30c5261c0b5d0c1f05da2d8756e39132c52b631a77c016d4d18c700c00dac06ab70b1ff2c3a2189103441d01231c60de8d0da5fddcff2e049c960100834e3bf2ec71330f995e40bb94a92938ea63a518de50a28839147fdab6c0880c87ddc86a6f2709d23b13a581e1b4183a54c1e01f291a1167b7f24b81226b2a0323ed1e2175901e8e6e5c7f7e149bd9f3e00a20b450e3a27d86375a4d581f3c009897941783ff5e5677de506e33bb5c58738d84921d04b17de4c7ee4e2592d609a5d999bc8692b1e45dc5d1bb0a6f2280f17bb264de90b81cf1bb03c739e2450a2254597bc2a52413b8ad40ae6984d37ee13c8c5c049f06123c1e05d8e4222f0038cc5955af927daf5a787e47a7cdafd92e42e984d7d736570cda3bafc2ee8c0407215e4e5ffe029b3168c200b9d45ec98c54f20c794cf7f49733e9ba7fc6890dd14f21105930e2b8df5cea5b06b893b27e084f29e19050f9046f9cb6c5898205828e703aed913cfa3d088515833cf1cb2c716606b55a2bd3b1bcf1731668660b0affbb3e8a14480cf42e7c9b0968e996f1d21a8598ce79d405916b2f41849807bf14b0b687982b1597eae78c544289edd9112b0b187f5d3df5a37f1a21226303bb4c306eeee80ee2ac339122e9e54577c219e856fdeeedfd1dc353cc748bf807f98066546a20b81e3295d2f5fa99ec2832589cc0dd08153b352b9434cfe4030faea1f88399a7fa53b9537da32878f33a8592e4886dab653adb3a865c0a4d87050955c691cf546aada72b363e2061b5c9483da71b042d3f3df1985c95de87980024e294980cebb52c32a686ec49d2b93d5f61b606309ee7dfac0f0809879a090cbd341edb6550c7f32825ee88395cd908a62c72221df4d018dade67280db7f30d29e2f2b2f07671796644ceebeeff0a567379863046885b1e1565fc6db4e7560824e314d039db99d39546255f2fb47b02afd13ad365c39e9def2decd2cd16220aeb57ef01a0a688173a4d01bf8d7ac287cc809b1227f9c4299db6346328e38105bc192da93ce60dd5d542c9ba81fb1ea682651f9107a073cb6a9129ed6ed50205d0f189922e406aaf480a1dcca3f0b9c44a549820d4138fbb9d24d011a4313200127f44e29890716e1f8a647c5dde51e55a315a24f198216ac3b91ba9a40fac097ea3948562ee344c729c56ccf8bb083d3c4acd95e2d5ef5b225d3d2ffbc26008f3dcb0c558ce0aacdf288d3697939de41dcdb4625cec800bf8c3197485e3cd08de08750eb653c20ba24de5b8b0ae776a7ee7c24a6c35583fc7ba460038a9fc0eca00481cd3ba39115ffc435fc3b5bd30309d574e66a35f8f3aef6a1dd272620fe6c52811e72b3821200692260924cc50eef1d3ba3743764db9f790b7a8cfc702017ed7df5e13448a89496ad16ba89600a72128cf9e75694edf95724b9875b505554a4cb21da69cc05f521a27be16667a774c47335081417f5385fc80f611f0048f7436ec8893249b776b1d7727b755b4be3b00be1e7d194deaf239497a51ca085175ddd81c643bf700c2a85f7b3d44c8c6b56e2a9dc9d82369f5e2486779fb08f1dc2d923d856b22a812b78e933ade29b7b686d39d1f2b68ba8acde564a6320ce58b46a78c5fe849a905573b541c69ef3cf65cc4c2cc73a3abcb1be9c8b31b08fc05839644797903ebc50ca4830c40798bec71b44562e089007240c859367005fb58d16cad47597f1d3eb9ec252d54bed471693f144f6bd53a0a40a36e5b250d9819d3e3a29d4855b46dad8e28becc69fb492b0930d6223413a4ab4254625501fc9b53e0c864522a841c117ad78b128ec71f06f368c1ee6be33818ad1f66c50b88de2d328c2bf4ff9ddb38df4b8123743ec8357206acfe972c9985f838e4d205b938eee5a59af10395c6cdf84e47b7b41115647b116c9157fb2e8d94cda94b0f1c5a623aa5a827f5a3d85bec244f22504aecd7803b92dd52844c508bdbf6fc06e597340d4660d30a934b4f7ac9567c8cd723d0171f9f3cc638bf99dae6f7eb0362fe04d2051c5952372d687485e592ba12d7916923c86e87757e9d85cccd1404907798afcb43701db7524e6d778f40607f6be7f456f2ede975d7d05c1fa8cd0d5bb9d2d986f8c92e4943be09d05bd8772688968076674786c40800b16769f30c937685cdb3b752b888897d9ecefd8c1ededb10ccf3cf10044918f765f81a5f0157c9dcce7d401299fc4fb104ddf11ce071889c148d95c0cb574c0728dc526b0fb568458d893185cd0ee13aa3a8a4bad0aa9b95d2acb8bd6140fa2c511c521b0fe1db80a099a4573f9a2ac3a53c7ed8c6b482d83f1eed0acdf9eb02f402a68c0c53fcfa5c46932dea2960f53bf8b08efc53e9b19db408cb04793cd5c7f4112d0ebc4c13f71e2e70137d83c4d6320b268dfbd43a90645270cfbe061033bcbd1c0ec7eae1c55b48c02b66c3103560333c10284da92f4641924988ef0e011d41050240b724528a1b577407c7ecb227e030937e2520b1b447111628f3fc451298b203dacb3e2354ebcb886ba6f5da5968a5c79677866567914547cb0bff790ac2350843a5f806da0304eb96ea9b86bc3330b0c67a15c888b747a3878b8550dbc67508afe868edda579ee9a06aa0c0a31a981e635ad31e1d82280200ea12a22430710ef928ab3bfe9268d3bd607802cf9ce875b4c4a125a0a19a8d4a0376f7c042e5026aad7fa69336ee6b85e6cf1af123135b6474422aaf9cbf183a5e528f6d878b0fdf75cccb7d957fd92674075361d4db27bb91a194e37aa2f29203cda126c6f9097e8e1af3893088a8423b1c012e0774aa3473b29f3a87253eda6264501c2318029cd476955c89026dc6895733b2df7738e6ed99df1dcfb65ccf81710541e689030f59b1a598d45d4cf9f4ab4d2f465ddd0b7c11b95e2b7a17c8e5b399436ccc0f317aeab5d45cf6a3cb2f1f819852f6a117fd054e6da29f5e994a8ec935cab102dbc8bd1c3123ec3a4b5ac11e66798ee409e2eb15a5e073596f60bcf6cdad4a036c48fdbca710cc80497161b53ba226a823067ef6f7f1d737892821727d3a99026f2279e69068356043bb85a8135921a7627a93ee54edbf7652763fd88f43c10c16fab47679eec649bfb95941bcba39e0428305bc0bb36e7095417c408930d1058ded10837a31989c8157838fb41d31b00c9f9c9ccd8f47ec48be3e86345cee0819f2c3c1a1b4654ffc6f21e53633e668bc8a22d6f80f6a2e3aad0a066ce5410ba6cdc642f26ea85f9e19fa547046db036e05f850590f8232d5964df3a8b98205c15fbffaf7a4a3747a49f7717756a73afa2017eac60563c7c76a76b08a84010434088450409e337db1585bce6e9abdf36dcb0fb0d723628ba9c9b15e983d6909fe4e828ad65ab944a29af6d8580f3a2cd542fca1a6055099dfb7bbd125daea0c10bc24fd98a445c608c7912e8ee4c9e6b741a58c9877cf433a299213e2d82a0ab9aea05d7ca611deae2c36ac7283bae4e1d40cab9f8faa04816db4248902ea0ce2f1e84172832977bb2d00a66095866c870b9cce2ab49c6563b094e09376a10dd0ef56911b2de4382331b3ca6246c6976efdd34fa85a9752cc5902a14bb8b40ec6ead0bbb8e6deda98b6f0bfa2e2792ccf78f8ccbd0d6c931f2508cfa0114a0d500c58afacc24c93198f3d58ceb97676cf2fd817c9a3c28d662ec199b260b80ab7a9d4e15f8b6acea9493da192611cc1eb96dbea4f61992f5ef0142d11628403afb99c39f6eaa7a8bbaef4c8f713713a510f7423774f53a9aae6c74b38dee103d3d390b7b9eab07e4bbcc2026efe426ea60f58467ca3bd06c66b9983eade5605e8aa6c8d1c37c11b215c5bf022187dd46b256ff546d0b20d325694b256fcc9077eb0230173350f0474646e79e5b2adba59b91daf854c87af167b0bd5730631042118a436b69d1a0f1a99356745b4a7bad2e8ffd40cbea3afb0cd44af87e29409ba547f090f8f8239645fd72a30b653f9c78c52d1ebc9390a5cd17abbadba740b17a3047f0fa04e0fe522af839099da449ada245c23e2208b53cfa310bdc5450da4e91c33065bc9faf5f80142b6e0275fe456cbe82b51b59ed3c8ac1cc296a90e17365558bbd14358a0db55e4c3ba342c89925b52a51ef617bd7dc5dd55fa210ca98706bc44d1fb654433839c19f7e3efd99a23e2b86714fc00cd8fce4c7d610bc7ad8ff9111c95d6509fac7efafc3c454c560ddedb268e06b01696f76fb79a0e6b70666a652db6eb75580c0cd6b276b4e1e1cb0c8957500c6670ec73d8d8df008b3c084e8d676c14a78a4829b06e1c8ef084313196b889baf5bd5815af7e1004f66f823eb013815d6e9033d8b72ac30b7783d7508fab9b64234d5f5109c8ef02b00b169a7fbffce6000d7f9c85321f7408bb3a6683112d94d724471f2219810a0db204091a53d376f92497cc900c7da824645bde9eb95a2955cfdf31bb7a0b04abb4f16d47f33dc83c52b09eafb6c872f833635541f1bd2b90ee5b029576e10a228130da45d574aa4dc10c2a9fff4899dbbb349ac8f1372063dd6066e4629d006402ef830e26bc78ca920130eb1f3d01f510129a968f6776b0418e154c3d2f04f05851350d01f066e6875c76e7b723085ba5e3243bbc07b2a81bf30e2980d50afb3ac1a4c2ff2317c1510f59c44c214fce88f44548d11cb7651c144debd0d101c8d626f19d3f51e07d985ba8ee6d03f72fd6eab27839d3c5eedd632efe8d080ebab18b2ad3fce837dc69f27be395d7ad62910614ad4d42b1546c3dc1bc08cc0047f0a78f07425e6960e805ca19edaa6bc72ea9f00fc631d2832ba1f4baaeaf0da16039aa70add2b7424439bd7689ffd7eb6a290c9295a037d905bffacd8536012e2214546fd7c74426cf589fdba37f03e7b438733c9fbc8c6f004479c405490181ac8ecab9bd6ac8379ccf15ee436f8f7725d4982b1f2775c2b9bea16e75fb0d10de7dacac04b3fbd49c294443c84042e409e7fa45232a23e80345dfe216820b6dbc8e0fcb911510ccc261dd8bf922ba680950e1c8b4f929c9b909b17de02100e8810e31e9bc22d71c429b4e1b8e8e75c87aabacc470147bc89480f604414f0ad08771fe111087af1fd0897b5c7fea79d4ecbfe5c4937faca91b3a8818f05709e59720caa150153a50c10ec946ce050ffa2ca9f3476d64020b2f4569b6b4b707f13e59d13c1d965fb7413bf09f6f22eae906c80fffb91027471b78d54cd1de055e2a8ebbae9f99dcf36b51a1a914ccd09eca4513c8426e7a0e404c9fceebce070928a2ba114651d3c1537401aad243ce56f34c75e385ce6700f77c96eaecad0b124dfb656d0d45d5ad2fef5a98eed1177f86660cc920bc6a520e843d162c1e001ac8ac9bd3e3fe1d81bf2b722760f517b9a5a726952822b7415ae830b9d16a05d2addd9db0c9222092f6667e0a76f911efe0986d3f23270bae9223859414070168457703254683b47b5efd890bb955c31148231300b6ec8fa14baa1b7a292607bc6016ad26b445b52459793f8bf258498dd4d75313fbc4826443400dd793d6099a001a456fc8c874385b31917b5e6ef1a404d36321a26824e34c43108592bb0f395871394b242eb1a6d73943d7664a40db5b5936de803b16ff19729c79ea4b0c23fd52fd52e7027fa9912e8421819d0edf248776cf86283adb5b7ac5138a980d57e3c40be4541e9ad046ee54342353bc7f7ead1a4cffcb6db8043b172c587c08e8a5dda53df6770e96c5d94fdc336b16b28c75aa2994fb48d01cc4a996dfd0077660ba7b31bf61dedab78a825ca9d386b48cb729ad8b604e5a2cb9b375a4e403d78e506a1956782a35c78d3022b248a32bbd7122a285feb561ecd08108eec30d33b7858f0b3b85a4a28f15982cc6cbb42938d9455bac99a9ba8846ecd5a56d043861790f19093a4bb913dae9279d0a2266f7493657962331f5f5a064780d1a0f14c8340828e2af8b0c1276b2933e2b5e63062234af15028d6bee79d08f8a3a048453624a6528d95b137168929389ce8617b98ffdf116d796677dd0f00630470cbf23409f9dcc867d7208684d66b2f5411644326e6e5f17a197dc6af13d13d40464262eb66d0d4f5f84178a784e0a96a9bcd4a5b2919a87f4163c4d28e5d67b090766a8b868997826f02dd60883dd0004e83125b12d85e0c9fccb904cc3788a0775c29dafe36f858ba48865bb67abc7ce57c40af8556707d7cee7077a7bc24603d0b05ab7f57b37ade9b99024c82838f21561e5112e4847a7be8f7d901d1b7c048140b9252363820c1fd78d6eef651b89a2ee64979a9e5f61ad5d47c607b25d0f3a568cbe07fd6e6f5b93abae044f3243595d9d44010de3497d9ee789984a500a33a85f22f78ac137c8675d5656b6597080ddb54f79c6a64cac36e8ee1d63d3024fe8926760cf5fd7af5142aa4d66a24416acb03088942171f25873f59ced790c33d443b5bbd4c5824d1c18161efe3868a54925000f32290c393d22603667d70fdd9fdc8079683130d0b04a3fbb5c65fa6555c73ff09d4fe4330f7b0b5859240446fdf431f5e5f742ebc247530a4dc7c126ae7b5e21bf6e858955b753b2210f04d67d6ceab9e150b27bdde5e41d3168e68ff0740b0d578cd71311f300ddaa14085039b3b3a3c9b6c5c7100b167c8a3b725c911af69aca9de8825330e6417dea05ac3a8421b4f61230cd2fd6a3986bfc535aa68ecee46f7d88c8303232c1efad0c28bf99bfac05d0d73fa555c7bca744b6c1ed9a5b6ab18befb193e576cc6a520ba660344551f5c91d2d34d8952eb91c26987d7cb085bfe65eb2a90900faf73f0ae0489c888ccbad19ff67c4f58072cb602b0964cb7e3900a099ecb7c36ef420031badff37a989537a460b69be22986eea429f44688bbaf709e1315d9a4a4d7d0d7b3577466d5fc218d24c12836e8f8480731b932402fd94feceebb446b1f7780283e96b95e2c9f788a579a78ebbba0c7535dcd345782bb005fbef00258a58c8008f6bf81108ba169f1171823e06c8731afb80488dc7e2e3efb7d294621bd9c40b0898b9fe32e384675c91c4a2afe5b676543c1cffb155f28efc77dc619a9668056685a1bde22c5e3511d2c89633d25932e4d6e8df820af7592e3ac3f17e31c808977f34226ea9ac3e9915be80dd016798e82c0ce0f02d81e88ae0cc19a311260d60150d46af452d7ebfbbb9da8e08fdb78e6f7285611e5c281f9cbb9acaf5d50a29cd1b5fafa8c7665226a29e1da2d0cf36fcd213ca6777af33e66076dddfe70ed416075670788a3da188c9cc128a63e9700be5359463858a128e445386c1d305ac898d9f737d5eb46e7e250e55bcc4c051febc0d85bc801ac0daf9cf9b1d700a388ab323bf8fb603fc594dc44c70a35be0af232e211baa855b9d3f4909fdb60a738da615ec2cff585cdec61a497cb6c75fc9b2eb2c3ee5e82bbd81263d4ba40125abdece13ea548ed85b47a51b7467e3ab7b6e4f0079265d5c70934deafe87012fdc3c6e06399f5a5746e69472b29326bc31c929726b7294919d31e95a86650647d38390f951dc6e9efd058fa65117e8bdae6cb732b715ed2570f279d1575c0c37eab174201de479ce89af32f70010f28c1257a899b881428d3ccafe3c255203ba0f619471cc0678af64bc6d34d169531abeb319daceb3dc02b69732fcf1e900c90c52ae968f05b6d9b149f2cdc6a36081b4d39a8cd4b29b71fe2fa154200303bfafa7764997b39da6ce7ea4bd08c7ca55a4567eb9be8f6afb4bdf75cea2630b86c432fa3119902a07e72cbafc0463a40f8b5e5be1ec65e0a6c3cac6768bc30f4cc5d409ca3d3b52b0370e0945608a77dd215a24a23825de757c4388b08d490f6b5a64694dddad20951c3d05e54b8f34f667fd9a393c2ec037d8f2407853c3097f13faa12400b8e3b220972ac562328e179ec6b2137b8940801d66c85b698f01061dc13262f2b9c8a660ddce46f4309a5c03aff8f8afd50e04fc66e849af380548bdd1e44e50481a1665566d2344ea863a321839fde3089f084397acaf2d0106d1e06152a6af75da2861a93dfd5f679b0adbb5b8e69fcd63cb6846a9d0070606d112bd7509eee11f1dc5b99368f9ec4d6b2556d523bed008f939b0e13bae0203255184de9dfbc62414966196ef9d14ca647795585093482b9adb0fc9041ede06c760cbecb85829fba2079486cd6395edb9a19d1590cc1ffc08ecb4327171fd0ebce2bf1a9c112c513ebc0c1fab77b79d393f645740f966c7e1102221835e3e0d32d04972895f65dd829dadf0181c608016f5301e1145f6aa3b554cff9418060dd999f11a0f558865d52e52de895e34def5c9b0518c52bd0a324c7615b7053a084aa1189141ac9a0da46cf218d0523cf0a59009fac44e53a0d0fb459b10b9bd04ef3295cd2e1acdb2914da8989e70516d52ebc9040603823079484df5218936042edc365716ee40c971f79401d1368419e6d606f6aa8f2f3efddcf0ce1ccbbf08ee12872a91107f322870d2f6e00495148b8a2081359b06e72a6f9acd77635f041f48356b0db6d69e089693cc70bb1d61eab7d9c44b9e16b2119216d2061dc40bbf5d0a8cf532b38d468eae6e115e2ae47894938c25eca80cd83f8c797572f90c35a1b3089d6aa7a7b83b047631b09b0e1f8b7728daedb9a4899c098709bde804f0f734fe3313bf9f2162d6aac06183d979f4e0d076603a15666524236798e60e347bf19c14af3d010da8ae5bd2f9f86b736d9acf1e577facb86110e4d26d580b607771b5abba84e8db50eab03e253a6b88d749e27692e0c84fe5614a5e81dd010188ebae4651d3c0d72d56ff05991207bf25a5fcae91d26192be66cb9434ac032b3d8f61516fb7021deb998b5828763e92149045f0409c23537b36130305ec02a81f9abab3410c57f452fa2f995d16ae8fb15878ee1a11b302844862f300750be635ba2fc88e3dec50a42b08a63b22415c518ccbbd74afa6b88a8dbdf1969104d5fcfd9218b8d438073b9a8364fe6974701858216b0a2ad38f64c7d1f1587b00a9859752bb8d647588de29969a3666637c2ec3c4270c6fd6440016bb3e850e0de45de3688ca9dc7d3b506b3ec58cf70a17a6001b90861beca8f0de0abbefa802a38bd5b97595a8ffb6738571fdc033b26bf676b83433d8d4529570cead86a4086e720917b77334f84194dc983a842228f7295b55ff91710af51e0a32e5e5f406bda9187967611e2f65493cbce0016af9d4154e4c19ea7a72ddb14363d7f9bb0f2905d16b42a50fabf3b2555cbdd1c6522982e1395b4d66b88d22dc91ba88df0158e60fb02e0adf444b5fef7363771b00f936050a42e0b510c57eb246972b4f070caaad364d0608480cf3081e76aa7e0db51185d8ab29f352f36961d0911a170663a1fe9aa5cf89f6f2e0f23f17dd9607568691ca314641d05adf106af83bb70afbace424e390ad374ee9ed870eeb40c0f44a1b3bcfea5a2b239f4f99d1ba0e0c12dee297e09ef4777ea3a8143a5d1b97c4e01083023730d051e390bd76aa0909bcf41ec4436b140dd05ef5b11b0a67433e6b0453dc7014a82903f9ee8bee7d0f6665d27f19b65a73ab52e40805e195a1855bcefcbce5a22f0daa79e39053120e5c6912a40ac273021a8579c5bfd4114d455f4f0d16909bafb751e8bb31de7e0586bb75771c812f37e74be6066228572005a130ddb79053fafa783abd28a52a0cab0be882690b1aeeb390c3cf89ceb30f7f1ba10f3e1558e7ec1c25cefc240b0924d7d8b49bb474ca64b80f61bc9aa72851c86d5db85743d883800529c6a52c061669ae7f7c3085af517aa742fc9e8baed7804413f32ba03b882db595ff81f80d332293ab0418f7cc4397cbd2d74ecb84e2e03afafa7f3ba56ecf512d7f679702981657873418b28b9f577854d49efda80b77eae548b3c2e0ad62d23fb10c3002a31c0ae5430bb6ca32671a1fd5bb6bca209a1ee7ce658e392d8f24e415d46802cb751fe3c83fbccd07310b82dfde800bb0a446e18a6d4b6749f168c051ae6603e5cbc4d1eff8864c95b6bcb15ee2005597a72f36ce914e59791071bdf6eaca06d44be85266220088d5dada2a571e4e449069965786683b7ee83d0f16dac4b80effd3e937757811e904c63b231ead0cac0fc7c3aa92d79840f32e5e8949932b06e4490b2dd7e373300400139b16d7c6dc3f4b11a78766143f5434f2343784cb0070acd7213ba3b05cf586a3e30184837864babca34eccd40e0a55e22b7ab3c80d8f2f63f9ca90c82ac9fc35e623e93499303f74b2461f3a22723d8f480ee890086f568edd489ea587cc13e33d1a97b29357e44ad0da455ca0c212bfa34f1d2900830b48c027a689d02332878215cd856f04d0ae57d221370592d083468c2f2608df58f81ccbe64a3e2fc53ecf498a7e1a2ea7b60bf3ad26761b90d21f509afc0385ec0fd065c5ba36b4297ee690380aef96118e5b6d19ad19d1e98c2e2397aa09b7801015431307e46df482d35d23e66e65ea9a007a726e1a8f7faebe127210040458fe53623b2d2f123a344803cf080493691c0262a922d9c5952717cf5b4d0cb55970011b2ac43660ab76778609a6978f630bd00699326a84790bf70682a40b39a2643c42deea6c606ecc0b215116421d1ffda42333b8af43f109e827d6af0bc2947845605b7117a7875d9b7527f02fa3750d1d93de7553321476f92b11d906fbc23d1a0783f9e4fbaa4a0ec7b92782e626d3276c4978aa07314b831b96e6011ce49cab63b37d65234480a22656dbefc4f681d50f23d6761b5df83c6eecbd01ffc416b72d8df1d37f715fa45e8dd1d3c5078ccb6808b48c8325607f45c9ac04333c950b34f393733932b2b0d2de8a09ff163804f8633a98877d7a2cd37a5d02f38e492b99d874b1c22fda102788673ea04df7ba88b3f236f2b372ac5253f808fb919da916b6f623bb0a91ea8c1176d3aa77e2262f7adac3ec7f9cd57d1aaf023eb1f69f5906266f20fcf1b249056a02ce4871024d96d1ec031cff33a8af7609831bae22976027df620e8436aecdc7eef553020b3aa187837d68a3379acf4d0cf6db1362687c85406d29c405426de2a6add96f8aa60d349548fb095c8df6670fef113929cf04244129618fabe0a5df19760b568e0cea0c8f3e301b4d5c6ef8021bdec47d1396a5efe3e7e9c8020c1c83563e3f32a0897bf8253b37f19aa99c0ab2314cdee5f6ca848ac2f1c8f51d7d05743621ed7b2bfcae3e3fbfa1a8ef7205abc494f456846c7b45684a5481095ca222ec062cb5186a6b6606049c0bc1f50ae9f558c9cd9e20928505da04d88c6a85ec0fcaaa4d12cbdcb63f52d8a6756208897a8b7e37efb1652019e311ada9735a1a56f03bae6e6b6cb67db79a14a2ec06d930f716cd50cf97ab8ff030620d4e5194debdccd02265c089d69c03adbd0d084ab0510f0f61a312ca4d95e1e546390411550163150c0db1ca8a11646e0db90452b4bfba517f5dcedba537a8ef2d496db734a7b037d6be8edf4f732d995ef10a956d650af828845e88dff0c5389e082bff1b0097f25eda356916c7da8e825209ae7313a9e05bd600a39a2a47408890515b19101e8c7f2b22604d84b60a71e60239e9a2b826e678c4435d236698b2faf3388026e5a26669826c729619b612ba0fb4799829f37868ef063f492589847ebc4d3bf731f6e8a57753f4f5ad860a8403145c514f36600e330d40fd1749a78edab38df185c4ffebbe5e871675606a2d02a8abaa60f869406c93f8843428c50d829942e29bda3480a495ee76c3b3a94f03056a6dffd2607d6f62ea7c9a90f01db535927808b7dfe49a331d39ed520eaa011c7ee1bb857c460e807a718588229190fb07ccc8cde083faecc30ead9fdb3f00e81a3ec8657f785b7339ba5183a5fca2c9e6443482f22c329123b6439f85f008577cee1d9a6df2a44253f9db34c6d5a5a83db9bafc2b052e41cabda90f8d2400b7e132b6e00e29c39d6a4f84baba144a32e46c86101a50c02a6f60b3bee9270acf6cee50bfba70025b3932d90482d055fff9faf3e86b38cfb54eec30610508018b90af490ac18ac57f61adb13ff8f44fb215292eefbb38c960441e8440f2e40cbe756596cac3bfd21c3ef0ac57e3026ba0ba42d947ee001d21f7c9194c8cd008083bc7a5977b2ef7e2adc1c0771bd7321ee9917ae7aca64b1f585b65877d01011a357cfcce55d641906ed549756c57d85691e0622f3ef33bec542ae943ed3003213be90fe74ef95f854e446f0a9df795fb0d0c04e70f22ee3f97e9c2d6e0a5019b3d2a602df705750d6536b300f4b6d7c975158bec827f05dc62bfbd19c1fa06419ecc79eee8ae417b36429841bff00713ccac5e970da68f0152718a13aca000faa91bb24426a67dda16571576aede0a63152d09c023a7d397eccb600701810f9840c0cdb2bb7e1b03da0ebcbbc98b860d9c889203cf65e95cb01591ed0b040e0e328b38b34f7c0aca17d471f63ae795bc9a9c3ceb0515ab0415749b68796106f91b608c9c317dd3bc247ca4c0103b3ed78f114889d4633691be3208962c9e0ed0bf8ea72f53fc26611edafe21490580bfbb638838720ad4158ae533e9c53d0f16d27d70bc39fc9f595414745ab7a5fe56f56ffe3293e1c167a2fe9cede28a02f43eb394827f4c2d7391d439a2c53744e5eed49de8e82815adb16656132b95067fd06a47439013e0ee376679cf0ff3feca42f1d8fcb8462f71a445b9b584bb0811ab020294115ac326acae5111ec74a00b7a29a5b78ec4a5eb21dc54aa6bf20cc7b0d275ee5ef8a6c5cf73b11a2dfe63288224432a0e787e35d51011c400ca0782e74d46d50c68323141434d17b70375188d51644a6e8d66fba975799b53cd02a36ffeb1363d31ce8ee987c04f615e49e509f2eb110101c5541e21674ff9b3047010062f476402fbd9aecd00ddd73520ed6672905c5b7456b41bcc042d4e090a4022785b07fc42194a614196f87d618efc247e590a896794113941c8da91120dc7d788367064ce2ce32cbc53d37867d8e996d05cb000a4280a3ba9fca88daf0f940d0fe6c829466b079d540eddc8c9a0888f6115893599bf46f4ae0cab785009994e47c1eed1b7841d2be92d0a99a2af1fd10196cb170e1316679dee81daef073ce0270a94f133125e2647edbca64da53c2cc60eb666e8b8b8b7068140a2030d368012c211461b0b93bc91cd58fd5ff3535a20dd954f5fcf15013cad21a83c051ec4acb2bbb35441efb24d72ce6e1e201208978a8861035368c31fd948ae01057f021a8ff1a194e3c0c1f17e219cdd866740af5b7c5ad0758ca2cd236054a10ac03c8700d201d650e7732bf8d5eb9bafe0253a244073df5d497f93af01cf8706455a6a82e9add15ca2cbcb611a9885c06ee5042ee607af1233c49a89fa37290027bf46c65c911607cea4f2904974ac57139c20f9973295516b964f41971c5c0e582dde683196b5726cbf59b6f396231a7181f1f8667101428adac988881d630308129a864470c9f2d195a7c0572e4815739e49cd5d9e874317f4d00a3f7ec909232c7f340948c3c970c1e549fd77276b7d7fcaad7d2575b55bcac747a801e504975e1c71a55e9fd6d284e40a4ad5b48c8b670ebe068ed5b6574a607cf29df502d4d8488fb6e45a6c4896d392a411f19521d00e7cf3ed90f9e5bf87e0e8dddc0b8d3c4708a7b39a70b3acc21e77201c4e2fd180be42d67a6545548386ae4b2b04509e5b07e8c0cb13f861c83cd65e1e5d50aeedf259ae36fd64280b2e0c34a506cfa874f4e311002b6df4768e38c44111ed37efec4b07e6c73baed58840827b038653431144ce4e790cfc719d679df9a3c5dd56970ff000c00f31483f78d2b00bd85754266bff1e72fb109e277750935362e4610c607049e86a3099eba2a777033a9b6f0b53cd203d20a7a97744c47af3f842cd550fa593d4d6c7948369a5c0090b5b7e719bbfe1775ec1fef006e141e46bf0f23cda7f835d57d3dc4ef948380fcc8e41135142d5927e748f4a15421567544a927146fff898a4efcc7255a46207cc2a229dc7d0d2500223623081237b38b78e92e2e646093cbc45e8b545bdf70a1e092db77c36f0e3460ca47e1a39cd574f124f9f412407e660fa33ae0893db0c75df07945121a6a6aaf1c7747c1ea71a5b0f355e4ad8d09365ac64736e22c80ba4a232193239208abe9a34c4904c0b137875f52ab21afce4bebc0cf1aa5217034b095c1f5c824f4cb1a8bdb1fb9e62ca1579c0970b1b3854f0d5f24b13fe56042fadbf65fe9c6ce4353c561fc92a88a1adac382fed9bd6a0caa09b74cacb3b0e2576fc1ebf5f370d5e9dbd42bba6651ef121a6990394a6e036ee40c4032c7b0689cf15a462c5c399bacc142cae14cb0af00154e4b1ceecb30535e32ebcf069021d3230f71dfbe7061651eb382ae0b8df41f91cb7ec9ea960840358228569e80eb2bcc3b9f46f059f3bc11d2a2ec5ac4ccbefc29843a87c08abf094d2d27f200bd2772a512b12baf6814f779a454166c7e82a07fc66b35e06c9c9262c5e291a0b9c08bf15b524989f0028598f98de4e98fcd9d684404d2cc89633d752f196e90da3f6b58c30288c73c3e9d4ba4d3b95841e2bcb34325aa1f5512937a1a707460be5194bfc055dc91b214fcc8a017835da1ea46e6e1e216e5baa4c794bc132ca0ce4383226b1cfc4fd92de04398ed683280f72d32de415aa290d039c92c1ebee0cf3d6e4d9a5419a3e708de8987ca9e53551976e51ba0dd56b1be60a72a1757b05875d053d0f589cc3d69c83f3efc9f6e638b4c3b72ac705b0af1a5161a8292e08b56108f8ef4d480d2e88548d66e12d65ab981aeed8c673df03f9754490f9df0bda77167baf67de7ce44f3ca56e81fd3fd1ad1df9e08974091af20e781d6490092214622f9f315ae42e682df71b6a376d925be0e21b75975cff9fa90201ff120d271df25fa4e34b9cd06b5fa5feb4405f6bcf4130ffff604e5d388dc59279cd02feb680008b06fd7f271ecff8afd3fb3375d48b3bf8333848899003e0d3b1130930c28280e956f12f3ddcb90260b8b03f1effd39910254fcd2e8977d5dd489e0ff61833261abb91051d207d93d464f0bf5b6affd566545d18dc7a86a7a7c7b103015d0a9879f1c398361131684652b4c733287d67ac263973236ffa5769a4f50b9ff7a157327c69d74f68db14b2463dc4955b8e6dd63c389df05aabb73d69f3061a479b65ab4666750ce1c63b562f06241a8318b9fd9e22ceebf319c71a40ca0fcdbd83ca266cda3e88f06dbee87325c28ff2f0dd3ef90b57a7de412bf4df9c0a2031d7f6061022a818ceaecdd662fd30892dfe55cddfae1577c72beeca8f7f085b70dd0a648e437c31aa2ef574490a211ec9336a95997095d10ccbd62b26230f796744bc028b8eaed1fc4d052bf57296131623401c1f5c1a3e42bdfb83c52e08d3127d1e1a18afb032a7eb1c6ce6b781297d3d60e16a5338e0893260201d2e03ce8fccd0399ef794a4e793c7077f734417f22b83cfa6be701b75a356bc09b30edccb0ab5d01e230a8d2480057250739ed77fd4cad1c381fb2bb7444bc897480e90fde5253508f618752eae4d9bc282cb66d3bbff8896ec76681fe4bfd81f10006f0c9050a9f7adfd90d8b707d9553c1622c1c3aa67d7bbae6724864e270fe10fa653a030ca8b84edee10e101d870680eb7712c1c2eb9f1f3bace7aea83e6250d6231182a3b8ff4e1b2df1c7c53f880bad957899486862c6f58cbd15a5047720d0b45de025e0af6d191d45341a457ebb428f2febdfa44e95bb4394393e92e3000eb4f3d2fa02a9347e6bddf6f765add19c889772af0cea2a10f68f64bbe35e1050bb0ef768462332218ee6cb40ba6f44282bd5269031c3a1c7d8aa8753c32990493689ae2ded6da4af43964bcf33fab54d8eb61333f580269716ef4a0c5f1860cb2ce34365c5eeef7e17bb0afdb8bb1156df702574d54e31701ab9262ba59a407064cc0fe4ec822543dd4d75f65ae481757f50f90449e1e23f9eacede5f2f1d0873b77aeb8ead8684554aff1efdb7f53824196e0a76bc16f54474ff6409e12e06f73bf7b76f9d68f7424b9c85f7781b6384dbe3d54b962cb4b3a6b4cc04f5d40c927111f5dbac7f0fda5937698d5021a14a7b0a6aab3207c8928bcf112ac5ad08bc12a5b2b67e465c75a86aed89b58ad9d0281c2dc5b3adfd3454b88e842ce409c233b3974711aca70eb457f9175fda472d25363e909788e29e2411822e1f810a5f50946d303e42664fd051d6e5ff828e04ab9326b16bcef7f71261d2fce90a078fa65343ca8ff03d1c1712bfa1954240a26000cc3da62f3936187b7fbd4b220efe28b37bec70f174313e4e36b5779c88ea1203a39288454a41e4a7552c651f099c4f66adc12b07a9d795f2ffdd09659f9bff891ecfb2402ee9091e1a5b458e02eae872331b85fe5ae5d81dba1523d693c5b79767226040d9cd2f929b84a7d80cb33e1da5300a8f6713361bd53bbe123ed781b5431cfa4709c38cf1a2adf0c400e59e468aba172f0d2db284f3e4ed1099214a56db10b449d0e4223fb39d7e340fbcdf0490281387ca2e1d1f9eda9cf0a951d8b21d7f284f05f05e35fbcc556c077aa8b2b77d2d4eee3eff530e137d8e6a404ab838e236761dd6097b798b52fd0b393f21b08ade2aaa757c7bffd4e42cbf8a7b432af60e66110324971ea7622e045529d8ffd0fdc035852b40f7e1b02d79aee543a951c594eee41992fce32fa00892eb2b5be466dad771ce5f1d2c53af8cd46a5bb352e68f1ae9bb0970e4341d0f32405f490e07c198a92edd81b573ac26585c3c2c1c9bd94b2e667ceb75f53608470252c9cf7a8c76f04965847cd57a97a29dd8c01767d1deb36c0bb992b14c0cd1a9e80ecf588b6ce5a3f6a6b95d16350de1ee1e233023b0717462ad9ff0120c60d2b7a10a702b0779cdc6605bc78c952f0573b8fc9d09547dd6bcaa3b68640f23a8f4e8ff8cb71659a5517a997ec6d6f6649aefc488c71c31bbf1e316db3000d1872623db7500711ee80327c683afd578b67f737391e1696deea2098b3bb504d935ee4e30ad8608eb0a412ea0c732a547b8eb3d0890fb74fe8c4b96301c5708684890ce116be72ccaffab814ecef2a2dbab46589ad668a51aaf67e8a6300407a0fb3db77d597aea0e0e0160b965cc0e289be6b1b49bab042bdcfcacc6979500a6b175ce213dd3c14890c9e7cff06995e63b27aa212e9af6f21444aae220b5015695ada1b3cd4a5aba53cef777f4f22920e44a3ab94e0d2e7509343a3caa8b072950c785850fdc3fb7b4bbc00d66c977d99374fde26f3dca428d1a0eaa2ed701bf26c479f7eb3f87a4daef7fe6094b2563f100ff81108fa29fd9e9d78afad4066c78a76576e5f7ed6013c765d4ee75e0dddc3850e3de1a0ed3123cef1bce0501220116eb8e55f23a8c793599ec5b6b50276b25f0c86480bfad1167f2c622f90e5dbb26953c8f1c09eb03bb9c7c52ab673c8637aa6e2027c9a58d0628eb70d3032d880af2a230ee9c7a7b7603734f7befebb89ee06eb12c68e1d471757ffa200a432fa5f77deb14bf394fc9e242404fa64ef078d71e618379ed2f976c579b7f01da02f179746e6177085f15ebfe71521da0cccea771055583374d521eccb4870534bcebe42216d2e3e3681a25f18acd7f11792065ab7b50d91c4daf4af53a470bba43b6e6da0459713e765f1629937ad9445993f514f9fd4bb7750cb1be284c0fe78178cd4dea12f20cf75ec5c067199ce5708d5d9faeb522fb62e788efb8d406126e3c5633ca56407c6bfaceead1acc8dd9eeeff41f6d9d3f5bfed63f7964e0fa1d306e97586a65919b6df50a781a8218d9ae0b6da6654ab80c2647fb2b8e209803a7ca6edff241b518832f293c03bb56eb560d8bc628f01bece4dd96d93700458ac8803ec630c1340e177ad040a0d4580788f23fd3357f44b9e90a135dcf502d336ba029ca34e1f00587925c6512541a00249adb00670c5e6e23eeac9021a0ace458fc9abe0dd6a670863a3e5bf9336ee1849084c371c151bb08de47a673a0b28eb237ab7bac01d13ae3f0aca86a676d6fe92f4eae362a9b5cac526362be502c19d75735e1e9ece15ade0132c1fc5c678b8860038efd1655e3818faa150a70d0e71900a1446aca565c9fa8c3f72a245e77a981afccea2d2a6bd2c47caaee10d53f2a471add4ee74ae938ac1a11fd37b6929d99c7406bf16e3e6452c73d0920e43a1aa686bfdafa88e131df0eb0efe5b6d16bba067e886d9b62d7459083e4f0bc7481162d11e9d501a100dae3842247d1462324aefdd0f52021ba038efe83a0aaae1d0379b0fcee291c22383d282a8c9ed9f5930f41d2ffcfe69b2c697fee60061dbb4d1a003d6ead1d5c3adcf5dbc9aa8c42da15c452f0bcb204841e5794b0e7b272c8120dc0a962f25f831352164042341beb30eb4c3eac0bbdb8b5e9d640b7e3f452e05a1b26bc97b3590f8d4ccc08f92323c3e583b67b8472fb5cade990dd6dd280c4613c4c0bf16b4ef254a4b227bf619f085022fd0c5ce1f0038e8860c8d8da722e5dc718fdbe53e5525df0c2da605793c0968c41ba51521efc104ae0ae4f8a6a3a154b09b380f67e5609216be5c9e74f5a062c700ef3ce5233e98f6097e0a5b28f471e0a816714d95abb295f4a46a0d0aaaa8eb9ae5141c5ca9936d0e66ab0d9ca6982e51aa5dac8304a05c23006a241706bc201db460d0eb3f35d60ea7e749e98e345cae901ef37114a017bf318305b5bb9811a85cbeb7f68c2fd5023fbc8893f31bf845eca0561de3c75aa8c1b5be0c091111b2d0ec06211c6e0107d7b0d1a22db36a87d765bbf8a5761dabfb73fa7e62e2bb3412f3f3387e37d40030911d789488006272b7e6a09755c1a131b02e2cd7d0b9a6283d8cc81ff4610b8ea4e7814129b013476c9c1f52903623daf83a75fc8943bcbdc48625ad667d06217e03505756c5467131ec5faf577a147d1afe8cabfed4249c2c53ab337faf0f2b7d9d26c0595a7fab9cef446813009ba79ce993d7bfdf8c0e0738084705fc03d88d9dfcc6bf58b9d7b49a6e7a9e719af597ec1d5406ee68495b3c0ab5a8b40b211d8c9516be9ab108ddedb30aceff8a16c42d36621d17fa281a4f4a53e1e8029fae36446a0952bbc5370815a2f0141164bd358df3be625343f45c87810da803d27b211d258eb5965cb2fc9db284fb76fd61829965c046769ee14fbec4b18b0fbbdbe712a1df64f7ffc0eafbefd51cacf10f894ecd63715381f5bde678346d03b4ae3f7eea764018250b20241ee63d74378218fcc73d36405a78f28d66621b0698d19f25441a765c83a5697eaa0fd6101185ae8fccd39cc00fa7455a3070d606fa27523906befe517a684d56e31014924df787b4db74935b5a450e5c66617008fbf942f9acc622582846f9d7f34200dfdc25e5da9f01ccd5d73c853dbb9eb3046e6e5063aa282c898ef4e15e9b27f929127472e88fcd5a0800bb1eb185d05608a66cfec34f5bbf40b594fefc4e05d9c9530027d9b9282375291934d49c3b5109c83cf1753af3e9ef541bf22168f9d31ca56d63becb57e0b42b7755d5b7246a0aa5b396d57a0ab98777bd1788b580829715866bbda82a9fcb75c3d4720984090cdace39c82b8b6999adee653b6afc91395c60645fd5b0e3b5ed32193e84769d05b0aaadb0f210f9a5a48c3586d12d3cfc701ae3ee5d8ff1ef0bbde2903d6dae01dd1e0c2a02ac22d09cb20d974c8a8c52373cf8a608714be100f816be4cf44d0b8b4c5282eb5361582c5238e0c5e11c5876c7f0ea679369ac1e72bcab635ebe0694ee8c1fef1ab5667a168ce350548041f4d418994342ac763b59665d1284c80013fe85c1dcfeeb8ce15790f1ff6f0729ea55787037ff8c524959064ce1c0f801ccea9ca8920a68506b92d2ce66012f274d67c7f9cfa1b6ccb3cd232f518ef804842fa5a594f31fc33849082483f76380107786a0ffa85fad902630f5feb9f1085e7b8e22fa4e367c5f8f4d446c0625429d493d669f53a6d1604fdb0bfcee1307e0e4a0129790523a6745e8eee442aa7c6fb6289e327e2bf369c68ecbd2ba1e0682850a00b198bd852943edcfd61bf2934bb952be0b828844112ea4015c1d4b00291247c7259a5ce47f6a3eb2afae6640b7a8c455a06b163db0d8f65a51edd30f762c090c42aa81a491280576d610c5bb50705b10dc49ae4cb1e19bbc01a5da096b6dcd4fb10a25a1a8ef538fac7868fdfe4f124d90ac930ded7d46b33a282909fa09219b4e5340304c3ce39199ccb48be4e4c031b34a54fbac5baa17a832d208d4426725a27f423d4d4efb83583607ebdb6954aedfbd7cb35d315334a7a2f204b911f9d2572ada3f15ae48f5e93aa79de2b876bbdb2d46afd9886445469b3e0b0b33ca2668965db0f6b4a0827f9930fa68a087dddbc431d9d1ddee9f28b2ab066c518a9efc512e845715bbfe6704b06985da7de40ea1369acbb03734909d9f071bd588f342c59bdb6fb54386c1df56d0b1f1ff805785a1076994005b9e52d309c1957a55d7d602da71379b8a9d8ff8c33009815f5cda5009bebd6dd7f25eea09fd1b7f8719b9c85f0f0a061a655365c7f727de7ded50794f854fc3e898e3660966b23e4eaf789e0a37d0332e7f53f5c4fc9d510b9cbaff0b937dbc079d2bf50d0d90a39325baf1c58c9809e55f7335e7f8ef317fe0a5e17bf66fa3e673b1190d923275f87badcce0d00463bae3f750534ad1b7783529e98561653702e125f805f0e2ff742ab9960cc078ed2411f762ab9f9e1ff8d108f73444c6cf66ab44a30e054187bd6d5bd311ad7e6ea08c4e1d9ec501d2a1155a1b3290f65803fbd1fc03c7d0afaf691c3884513a5ba1727e7519722fb996b9bb88db80aadb3149b20308fe11dd52642836ffb641d0eb8044de6e762540c5641f9b4a1f3e2fffab7ecb00e3350da71a1a21b0835aa92e64d9f9e7237f6d63e902749d2c69d2b0d825ad01002c5e1dfd2cef31d1f0f960a44fccdd3b7ebe3b4d6b98ac8566f978118e39017a105aa5e2a3f43b94f11e0fa113dcb44b2c225cc8fda036b0b4d1f90e31c10026543b26aa0d759e8a13466081422a291e7e94d6b10e1544f999bc5827abbb0cfb9594f365f915054d8d027c3c3ae4247a77fda3d885d95e83afaf6d31ed970f9eac2fe0557a316f80e8a6b2ab9f3d3c661500c400921f550c49063b695a0600fb8b60ccc34968b3d0b6e70aa5fbd195952f6212dcb4bf533faa9db8720152063aa34a82e578a98f23b39e57d09bf5fea78a24b7d604f3926c4513f24cbed10f34397b1aaee0f917148e82017f74c474242535d03a2d72f80200f5e0388f81076d7e453984e4bc934350e1392ea774db38186265ebf3f4207dbad610a7c1c302ad0a2cc58103382b76acb472ee7c19b0122b0ab70d9dd224ab937eeb5d12320d6c7bf60052f6c3a9cc2472d74a8cbc195419f07263c8c1311ecd306b2e959804edbd1895650ff0322158abda1f32e61f0afc866f9730cade552732f43b2dff0e113e7ba6e03410c68e3b31fc1d6e7505aaa425baefb0c584698a2b08ecd54f05ea03eb699e531d49a19b06152b1c59d287cbc4d342dcb5faccbec4b906b3ef0ff82ca8ea7820e69ab1b402666b8ac9add17af43f5b81694b7ffecee39bc9b8058eaa8017f24c313f2f3b27f7ef9f1bd64179beb401ac21ba6b5166ed1375300acfe7a40ec5a876cec340409c9b3d2b5324d43a888307cef5f92fa88ae6f1a30d59f5b4ff69ae086cbd1c2004fdc8c37141d2a4380625e1252d62b752dd50510c5af90d6ceb964be6895f1b35cc4a5a39855d7b18e9b5e62e9f49b3af5088ed00a2f06dc3d65123368c7af1e24714d69cc18cd035933359cf485a8ffaefaeb80a5d760dc112be61c09e9931d36c50f2b8286ca2efbede9e50c9b98272d61ba005778ae37da1f632432369e90adc3d97d1ecabfc77613bdbc96afb0ceb2e23fa0f9cf05dd97fdec84a52d0028f5c1940cce7cd03319752f687823fb39a7a814a04d79ba32ddb8e86c5dc557c885164de1db3d85bae83f349ab6f89492c803a3a0e7ed26e2b1b3acbdf66dadc72849e644b3d76280d73048884f2720d43340eb20e2089aefa97154b7bb076a9b3f9d2344cf1f586a2021bd9ed91d5e199ab8d320b0c85e4278a632d767e0724e13cc830196896799123db745e533fe7b33178cb0f6081776a6280e4707745b7501ecf28103eaa9f4d7a31c67dae89a887cd52df0da0a48619bc6fa0223557f8c4f7b0e28373502269f1abc4928a58edc967e0480f81d17718f5552d8263e25b6c26515772393648bd97f1ee45d17779e5fa53290d32ea65754d3eabff72569d1f117d646972083e7429574fd9423c0e53519e4404c81a8e234cbdc5d81d617efb9286450b349ac27f5f5df786189d9e727d00a808a206d7badd92f5c8cc74be534da57dfdc58b0cfc5aa6b5c623db4b4f6bfe9c011ea693f9ac725159767193bfb9bb386061a085b38762a99c8f8706161b0de3052b8c7fa65fcdadb228c5bd76151d42dfa575f1b0b55b3b7a3913dfe27927c70e284461b24a85d12c4abc11795a02d36f8fa4eff728bd097e7a39aae62de03f0bd6449bcb766f89edbb4cb13fb05d5f1e703e26599437556bb0cf4531a63bfd05b84ba2d4e35489a313d5484548d5b5cbf41817fe2bd8b79e1256078fdb11500e4f6362a0121a150d05978f53844de6b64ceaf01c9f1227097de4e020962e230765cf499d0d0d3a941cfc9419dba468e8dc0e11fab5cf4fdc87e800380c3b6b0d8729d09140012de67fa92a39b84b8944c6d2022eb0d1e180c9f3c1c01049de09e813299be2d51b70e306068d3523299fa1146180bf4fcd41b45b00a9d7bb4c064fdc09ab550551dde5da62c026d5968e0f4d471bc52a36b6b464e435d580520c0876ec6eb3bb65335dbeed7f1aaa9fa9580b83ca54050aa5ed84f5cd56cb5105b8086a22f9e4149820d5f8c1060e0fb7bc4a2b0d51c12e5f7ecdffca87faa40c4fb195b9fecacfa6e8523ed794c98714387b294dfd4dd3fe1185f6e69c7d3309b22d534083f67679b13fbb22a1e4534d085470b61aea32151d9537feef775c015f4107240f94bd4b6e88a91860f5ae467024ba02ae50bad4468a0eca1780a0048caa622a8a2b4387a45b2a82823a383dc23d8bf6bffa50294706e899f8e9da0364e84e5e71b74da4f77f221d8cb5e24590ce7662c08e20d19d7a801646d2c0045511c8abbd9beeae42405f9b5a03ea3bfb79261aa908ec6cf70d06476539750adc40ab94bdfdf1c203ea7cc87813500109c6549ad1fd20f2c5b1fb71c112d40b0a88098bb75c287f7286180a3a179299d13533938a65c006ca2a77129299db0d04182d05baa7d01b00bc3da3b3ceb240e565f378e6f17b4327e8ed58edd1c60c9e66a0f99fb916efc71e185faad80ec6553763e881419dae985ddc78062e820bee09d7252306262393fcec46aef0318a2ef45f45df275bb0d346fd4d153d64020c5e2a6d6c0bb817bf0fbc8bd91f88674e2cf45e9eebb957759894920c16bd0d007b4eae5f7f73988cad448228816692ad31db849423ab8eb808aa3ebd145507bae009a341e3f818c6c1202e111321dc44b713ee314d0c32f6161d9dec098c09a7a6d8a97d9f66472d3a56b054acb8355398e59d68bb8073dd850aef410f4204659328515b8c446da83a82abc6d590318090848ad1ef219ea6c6f664c3e0a6073ab9dc4e3917ecc46189e81aa4eb26121e7aa800b0f69e27ac3fd3f09ec0e004a23d944ab0194624e5a11f02f1f8b9fb8d1b259889813e9e5486cc8ded6c740a8e379a5fbc1fb9e45ed9c4d68a16d38f0c26eb9a584d6c0c09ce3fef8b047b01c88f986a6df0cf3d5676d6282fc3ee4ace1515a71fd6b4d3e8685c031f55070e5371ba8d0e2e1abd4a80f665c7fd3cb775072c3da940df439d40f985040f960f5987b15e6d135c58d22e0acd6b211bb1d86d21265321b73a94de57a4e64dd709d5a237b21e0a40a3b008d3289191a7af49dc954657775320777136649277fc0ac845284f2f73e3804342810017fafe222b97b363adcd364261eec54557611709cf4091fcd4fd2bbdd7a4f50e9b06cd844578580b6e059ddb1d274dd1747e96018f32a23a227e58abbd9889f81457a8b13a81e4d2caaa6f2e77b759de92e2330b406dc863b30663678538db610fb239dc375487bbb72ea7bef02ef316b764ca07e1675aa16e14d2ed578c698158bfacc6eb0de4e98904a8fecbd8d101734af50d6549af8eb61d6c2f04b250c1474de153df28cd616b571b41b05fa6492d17a402f2733e228b8b835a5e9ab7c303c0cc8089c828ee742d13e23eb30f29eb174006462fca5c73af52a687a98e3a67545cc03a4d10b4ec9d73319298941265cc4c0310e8902a53747fd397438856502600164c0c04da20980d197e337bd4137c17039f66ea2ca50e97bfc7db21acb6a0a54a0b02cea9d4f93c90f06d78ddf81ac70e78aa56c9785d877420d2fe8abf9ef917488425ebec5fd7db586b0da1865c320eca94551ad187c758fe09657a970d2342957f20b71bcc732a7d5e1835ecd38d0196659ada53e8c57db44b64c1d769fc02ac2c9994ed7b69964293473787026e068cbcba907c052c5143a17ad56de9ee6b076f8853b60ee5ebf9ef7db6ce34660994d981e2db1a40d56b68dce61d319389bb4b21619c2e742432ae01ec9e67a30fc752430b537035a9231e536d43ac18014cc0eea4b618a3aafd0eb82357ac10062ee8507c8c68ec15949807414ca624dcb4e3e7ed5eb7f0973907fb1790d7d60ee4226221c5667059225cb6cd56664a08e5d07d68b9bb4eaa370968693dd6390455a1a16c3f823f4ed8a9440b1e8e2c0ef180106223fd7205aaf43b7aaeb9fa0c186c54aca2c8aa94f34259637ad7b22773cf60c76c06eb20bd4b7bb585e63400c1732fdc061b3d6a40923dce7e4c238c63cd681a5d519ac8c729395bbdc9c407bcde84e91e5507ab2d93f7e056b56023282e6b920f267d826446a336f1e28107228f18f3b1061f173f9f0a12d5a3d8af7d4548f2cda68b271294da4d7ab64b0b4ad41f4c1937aaf65827e3ff2a472b87979849806bd313622443d45d9d0ed1097807b57e0a92f6399892018bed7a9985ab2f7ab6dffd5ad669698fb0d253400c2fd07f2e197d4651be0155b2c9fa234bef27f18b6c1dab1d7cb46919eb164f030f6bbde8036cbbe22323cac10741f05e881c492fedd90dcb37a644c91c483a03606a2512f48fb3976b288f62c762c42fe735927aa10e01ea75cd93ebfcd5dd0fdfe8bdd93398d81b3e3e1cc619f9a47dfd22f3449982660da5f2e82e35821200377d66e10c5f62e357d9e94a5f9f46d2f119d11278f93380e0c390dd03079a0b02e1d0d3424dacd628fa2ae5abba15c70b84c3716e251efc857962c320d491053441884f013c5d14b406f0d8ab89c9bd027e8fc23e58818ef91d20b2d971e808b5b9bc7986d672715e8e2485d88c474ad0fa1505df2f641b441144bf4f7ba10aa12ef7045545c16a684b413b114c058ef487023e70291f47e14fb41432b51b057b4f84047a1c7e5f24a43e0a813928a96db358d37dc6fd18a9cf448c7ed21a07c79f5a37d3362a26f520310c964a411da48a5fba66a509d925dd77a6ecf09b09fa5f05e141898905999ac62e3f64d86cddd5d3dfc752680163e25590a55eb4000864ccb5efc6b484d7fe36ee8993fe24a4eabbd637222275faccb23a627f2e0950e36f4fe3154cbf801464353be3d674960b9be25432457c25eef9c30518540302931ad080d918af4d1e10dacf2e3f945fd9077ab19888086ff82b3c6a344a0ab3687bffb2fbb4f267315e89e2eef4fd88af7ceaea034fdf8e3c50b546d6ab0099cb9ea17178024b56bc83aaab513be82d50a13b4bf11fcafb1bd3d510c47a01f76260d4e700d92e460c2c5ba58ca364c9a28d1202098dbf0294a709408d2003a28e65137fac188ac72c0f447d345d4eaff79075f08b5d08b4a8126c06ed0f0aa6d4810bbbbc50a34fce0ac1280c92cf519aff3b135692fd7d57cf66d5d565077e03bccd5f81bd1d63ec21b460fe9068de10a36b42dfbd67ed1b7d12dcc96803bdc091af78740001368ccccf52e8e183a0febe9d7ad32bd66fd83fdbb2da1a0836daa551c55ae37740ad7b0c31e1940585fe41a77b101e2d59086851edd4d80c24b7672a126bef875bed5ddd4c05592f27ac6218368790480c9520130ca2180fcfd2591b94e858c92f56fc3f278e45ce52cf86121a26282b0962af55b6e7340524109782cc5b2ac21eed3f55de1d0c24c8e2d73769f0553a4d83eccd9d6e7a06af6817b3fd81d948812ea9df6805cd8fbf6e008a4f20dc7a22c0fdbecac921084754f3acd20584f8b04e654769a885f091e1e445f6b54d8b4742f4c8593de802d3eb84c2c42db5aa270285372d3c28c555f00deb230da034cfad86bceccd5f074f2a0ce851fdd23ae94c14ece9d456eea9ac4cf6688608bf8ba078eac21e800913dd708e79087fb50cb6170a00a839d761397e8f1dddc6b89aa1cfaa35ccbb0e6cc03115c72d21a13a3d543b2c825237f85113dc275ded5a3ecd3480a412510f219c6e3f9c985c69e4b101cd5449dc1084d1224d40ff67cda5f9d357f7dd770e4681aab6f420231fd81e8937df2d4f35ff9dda3669c87a1448553635f266dc0b2dd5971788a605b7ab0aef5c95af3f1cc7c5e66926e3c643b1412cb006ccf8077a7e5c01cf239405a06fe4fcaaec10663f7d4734de9c77edc0a03fd97812d702ffdce8797069543b8e466628f63a6494868592d8b737b13159458603b19b6a0e34d8d38533d300de7937e84f08c6f0ed8b06fd785d8335385805b396852e2a090938a9a8ed096f1aa05da1ceee18e6cb8b413e19628f6aa29cba068dba751402fb786108e718c592703705871ba7682e1111703735f16be8aed641e173aed009a11c9e657524f133fbdeefb4233f4d75f7316233336cd6f7d8897b207935120cf7c7c7019deeeb2035f53e157b35d750fdf4637ffb3312dd49c65fceb8c0b404da6b0ae6ae7ae35cc0ce5987caa6f69abab5156d647a7915f8091372f945d90abbb783c50374577502e250aa8c6eeaeac38475565ffdb611ec185231f8d919087ae2242ed4f6374ec1e7d781f43d2269e8411c709e12004ecb2376586ba40606a8544e3214d25e2b59bd96be417b7999d8c8278770bff503f7f5adf8580e7d093eef96bf304ba1e3bb664c248d0d273096f7716a27b2ba19fca02b7a2c7b620bdfcdf629354a31ac381265fb6af45f35ffff6c4b8db80d6c4cc23b974f64c20efb84adcc9b04abc8e9b2d27821a43c087314dec822787f9ec91c2f19749d29096ae59188f4325e2765a58b5419c8a296c91edb9321fffa8173e07af079706902c141721b33422fdd74e84f9a6fd93c3ebcc220d8879cf18a4f3d0c406bd20e002ed295bbbeb276421dea2651b509f4421d5613e24915f270a2acc5639d226b0223bbb036bf587f49e693212f82d26d1022bfa507065eb439d1cb993e5e53c7062fb8c2ee4660faf1e3d124e79e8974aa7a2b2e8dc01bdf315128b771b3ada904f235629fe54cfd11c1c360f62396ebe5a1d65c4ed8ded029cffca1410ad62a034edfe1afe0d6ef212094b9284c6696f6a571570b410ade4bc32dbf40e59db00499ecba3d21d8384ce26649e17d84e5c2af41a6a48eeafa4a62fdb79b77e72609e28cdc35cb002d335e96600b753b2b07274b2aea2010370cc7b1f814d062ef00c43acef1aaa895a914bc225e357a47b8a75cae9c0b70e3b50cc9c9cfc5079804c998d1250f737912ec2846af9494ed7e31c938be1715bf9b2c3a850b99e806052023047e1709a10815e7cf4064478cade7deb28d84adb12e2e52b4d2f3b0fa07212f2d60bd6f7b2de3530a79d9ddfd5a9cf531ae2fbd02b0413b737b1c6d6300216484e681a4d6beeaee3dab0f517487bfae613f2d0e1c28a2bb60fe6111c20e4ef081ddd8127575c9b2fbd858e67d76221621ee8606d39a33b353775883dc01fee807293f38a1d3f0898157686d92503b983f9ff3b288520c9fbd5ac96a6402a8b4c48337d7456ad3cc3403c2bf543ee3cd86c6a49dc05eb56445debce40e0fdc6d01ec2326a24855d9f3b6d191095e5404ccb8be7127af51f8529d1f3a0009c9f2c0492b383c8229fc61716b00014e486a43d024f292e5e697ac33392a320e74f21a4961f09e3f133e317f4fa18a71b871525361da0a17b91cc574f9cb63039054c3c858c8afc53f187d76259c2c51efcd95e2a6244f18f23440677ce0ee0abb38d7b53a4a0c0431e0bd2186181f7ada82eab0b120d63d3b21317bd9d961023e8ff1e89529be2792c57a99ad35b79c0755424638d4d389e5156a4a6cb38909cfa9080c8ef3c1e339b303aa2ecec380f8d19533f237ac8f53f3447103530305722acfba4328e214168d03d0e533ada067227af58453b463e7d961a633a74d0e96e7a5b49445fbe263f802a860b48c7bd3638901b150c4b135b6acea41b34a0adb9003e0cae7f33ffc7a2301814b8a139aaaef41fb2310e091e6e06626782d084d763f314d4847002a5dd546b1f3d48ecd5b3d97c6f2d996ad48c88e2cab2c0eb0072cd272ff9fc5fd60855e81bd9dd45691fba56b06aeb3489ce29d136de20c1bfeba60975e6bba237d08bf6b2c5d485f4733e95bfa36716776ed83eaea4203077e9feaa9146a9e8ee43cbc69f59c57ca02ab8eaf12c8b5c21ea41bf2a1640b893cf999ccea9f6634db5e00175b5f9873faea64bacf2b7e632e75474e7f2c055e932ef96249212d74104804db698db4f0f9c7e962970b9b0e3fb16ecc7d6707b047ac3482026a4476af25f787657609c5b1808d98109b92e235951cc31da00709c5f203ebe4e311fad3498593e610b1827ea98cf7d3956153c95ee4c4643f0bda76d2e4a0e98f0a4e4e78f905bdc8b4d4ad2c9d11c3bb5ece9c7714daa9cb0cc1e97018b24129629bada3a04a305feed217797b03d8dde126d374dfc4a29607cea120b916c05ad17dc67887c65a23e4869423b7ee01c362285bb44f98e2720272d3dd3a994fc71d2256e39a847023374d0955f3a6e0067a4898536084fbb00262aa89b6444f0fe246693a322bbc1af5ddfe1dfd664d392b059833b51e22b10f88c4222f7ba08120d24e345f2675dba7e49520e61a1d70e6204661284cf0f705bedeadb8ada2c819ac772c3683bd030a2febafd039107d84d4498a6b7da9680418ed153f9ad4d24506e793d19c38c18c6a7b959d8b439c72c9431b05786f9c0d519bd67c4240736980aa24d2a3b3d3b59965fa260cc1273966f32dd1f14d84069f8e5138e17528cb15a737b06003a7365af8bf851dda77aff822ccbf8253e5098b2f3c606ab30ef02efb250117cfd46be2600779f56704f7eeeeac4aa408990a9c491455d3ad8abb27cac6457cc427df655326bfbc62694e0d34c7ef7dd7cf00b4a5d94405b239e034fd674ae4a99d4fb003ba52a224148376d4ae66cc90b70668f46f0d87c04002b0fad3506bbcddc0ff7186b3509167dc8ecacadf31a3f1022efdddd0d200b208d2257680f4867ab350b87c8a8eba9cd926da40ce425df50411a0b53f59c505e3114dfcabb7b16aa04da0468b7a6d5efb4a3c20d04ed536027411bac7dcb177a2843a390081de7916c0c8a8f6a54abd46a991f2d5faa22e080540966e6737cb76175de0aeab5c2dbf77fb96852b6abc1058b7f3b64dd5ec0a3bf7831fd644ce2ff89681ff4aa7f2c88994a804f18b2e1497b55b8f95edc70236b265c6c8e58f00661baa41cf6b0b64b5183a5f0dface75a6956521d2ae5b050ac579a9afbfd95cd447664f3f72ababe829a005ca27501222f293e2d4ef150ea5caf07d5a8abc1cb641a1f45e61c47419fb171ac216b43c3304c7253c1f7e0aede783c028b35e80b917a1d0d3e7a7ab5a92d4f54c6458aae9c133fb25072309c881424dd86c205e9ef5f276cb6e07268f1d86782b4764a6a06f9b1477222f0b7ca04ea7730de07687035d8e3d4e9475c627714763bb1b95bb1b0d4ffc98970bfd54a0059ae2850596354d29fb3dec730873dbb75a346e3ce0e8cf165cba0700c8b76440b29540db41e2459141f59b4dac05e0618f78dc212e90ba19b7d2400f71b062e86d37fb30e7bbb026525e0e8419f33020c65ecd78a10fb51ce0456f022487710421a138931f26b95ae855b6bd9fbc8c3350481dbc02eff0cc02324f0b31826a0edf0907998c9e3c41e1e10a25946162bbc718be1b4e233a88c090b90abfb47d57514af691fe80f3ba2cdf92ae39f613afcd4951b3427e4f0b977fcc0444f11a91713ad0890dfa38b5a8720c1103ebf90be277fa8f3aa73668d94ee1075c1ed6d05a791a68de866d504270d792952eba19dfd69b88833dc72be099790ab68d3432dd7b52d91d593e7963c0c358e66f6770d55f78371d431166b1a5720e3de501cffab3c149ef3f6326bb571efc032e6bed83854545ace74f27c572ba0d3e6649865ace39af51492b21047668dce34c132c89fb88fd22dfdba261d25e0bfe0b0629f1df89659baebdeadb1de862619f3bbadb56869bb23d66f29a51180ba1dc9d70af59dbb3f860b1069d22552db009539227a055dcbcc1416baa0d430e8f25a3cae3d91808b1889a71f63b2835e12f7e52ac61788b61a7a3da0ee2de0a870588b5d708ddc3bc1a14bf0eb0903d6a26289d2cba1fc0021f15880a31b703f52eab58e1f8771011b5742933cfdd094fd7b1f9b650b73490829cc51b45220105ffe973025e1a1849de9000284a0d796d921013941b78d22335cf763d893c056a817910458055631cc25e3bf1f1066d1b8675f0879798b5fdb3fa6e7f1a9e0e3090372e1bda370468ca84c4e20ea3e96f3082a297d501d9d7ce11f6bfc9dd02ce696dcfc92e7ee7bd1f70e6ce449e952fcc255521293de8fbc7575970ca05040f495e10bdb683664821740e102fdaf0e23b67162657264aa89615bed24a4b010a755126b8439a8df9430dbfb16261813e5a5c6b7932caa2f84d31c767c0b907767ead07aab57038ecce23926d9337668eb6bf2a317655900f5af01aba8aaf0fdbddfc636b2c22944ca8fc9c717e57e4aa09504bb7a7f5b9266ee31f67e18a0acc06c095dc4d5830801617f5eb944cfaaa71db58c1074842a731deb39d9407082300499c6159bbb98040b51d7fe0e47ee7e51757939f88d6b4b1ec9eff0b05085cf05cc198db781e75348af1481d8212dec26a7e9edb81e1dcc1818d477e400ddd95e1092fad22fdbaced3a6b126391d6beeb592b53e524dc2ce2bceab5fc601de1d98c3250edb3d587aedfc791fe344284ab9c42b3709d6499cd9df4fa9640b2fed769b3d5beae2f4b5c73a4970597fa96151550c5aa1c933f4fbce75d878011d93818e8ce31c13ee54889a1e894d6efcb77f704f36f6584c92ac47b9b15600909e3e03c14e818673d518e0818a4c7d0ee0ee897217d0faba04041fcb819d09d3de08b66bb08607b759f77e90917c036e0d476a19f9392bbf9c5c5121e37406b3985b9cd6779d8962f43b9c090db2e72d267a701c51f0399e80e3024ee9210ccfc5c981d7881a0c195a13032dea28c2d758c1ef29f3450f2fd1904d8c68bf0631407bc484a51265411bbdad3052d547952c694abbf20e153fd7b81014974505c60aea9d0b85d082387da2330f4cf9b98e629bf1b4414c027f984530f303d503d9f1245be2e25f392e0acfd01fff1e526c0c00130da5f62b2ed08a1b920a900a76c5d0d0676ad03d29e8d7b84b74afe82088f86ca99460b7a47fcdc8a322350b594793235c5a20e5b9220812c55ff98f18f7a61909aa71dd98c75791bd77230ea03bcabd9935ece120d0c9b233c211772abba9430eedf2acc1713139bdde3606dab45cd6910d811fb893fced02ec805c8156e0613f142a4e226939ca5b7806075828fab33b8cb255bb9dd3962e5a8c02254fd9f818a877e8e5d2f67a5868f20cc09dea886af9b7d1a6ed09618f3799e09020179cf8e12449b2072701387cd001a9c8bf0449bebf96692b7a365b87d6cc3df10e79085b52e3ed090cb1d5d2810a0a95ddfdaaa2dab0ffd22ddadd02876fbfa6169f3c5cf7b0720163b1f3320800741254a377375d7842bbb9ab2a868fdbb30abea627d7073445d5973d56374a00ea34c3aa68de6b391171cbd2ced5aa9b87e91d088ebbf388ceb195da30f824042489f7da1ffc443061968bd06394e27d410752e1d04c4004b428a019f7ae6a06e91b1c1859a00c2f6cf49e77061c6c2eb0e5d2b61ad21e8bdb96c8bd176d970e4bd491c76ac17ec1214b5fcb3cd0ab9486206897bd4454dd94ea16959eb0520304476635245a8c884097cfeafe19bec7c2b1e0e08ea242bc652d4fd492e6aa0a8bbe0bac1f32591dfbf23cc16e4d6fc9be09769efbee2c0f1bf20cb94430df0190e9f33388c7f3b080c591ae6f839c3a2602908a9753e3294b14ce82033a5305e36f082a67cc9c5a4a659132b23e05fc87eb1d4b0f412af702fd195f01ecab0800392650775264e1b4bffa415060df7af25c87854cafd8248d2b7fd43e1a350f13ace13fb7e4530fd9884aafefc7d53e3ae1eed388a00d6511c047e9b1ddc909f023877ed5e45d4d090bd62a0c04482d10b88d96b60c5479cd920bb00d52610209d697cf08a313b4d48b3b9873588db2a9918a7ae97d40561fcfd6f2c0b29f0c8c38de977c943b77d00f3c94fd154bd32b66c77685a01f3c604b1d02f973520a1ea5ff0b712a2bb13131c3f8e24bf2162716ab6075429e91c767cf07da16750fcb6b310ac00b4afcbffabd034d98e59bb12a773302c5f4aa6b1fabb684c5fc0fe80fa8a136b3fe1345d81b4a7981ba3429bbeee04fc3e02069634f7743bcda0a018befeaf04f07a58c51bb4b744fc39798f6ecac905cac0980b81da995fff60a67b3cf08d961bb00163186fe4e4e50ece0adcb887f0e5a3020b30b7b1a962603ce22503bbcac3758bb81e5adc272fe79159c00db344461e73d4e3c1e3b394904ce950c6e4f433b3681ac7506297520b1eea349ab7e3dc25049f490fb9024b40156e2c2d16d0b875476140c17a52b73bfb34cfc4cf42f3fcf969705774e35730b65be396c255e376fb7deac1a7ad2dc8770525d0e257e02eb95e25b1b99f30a0403aa68827318275d2dd127adc6451a85bffccab54efe87b613663ae10441df0e279b8fefea4bf6ffb1d1b022f9f26d5ec0127e95734b7ccb3acfa5e550fc2c0ea686599cfa6432ac604676d65c3e60d6f0180e4146ac92da112ce2a4642b7a09862cb98d19336792b6d67e51f090430ae45bc64c1cd091169a117eb32df6850f", + "as_json": "", + "block_height": 58272, + "in_pool": false, + "output_indices": [10898,23653,21992,10798,15601,58121], + "tx_hash": "53ce4b3a565aa697c5fb3ea06c77cc9dd1ccecea13062d6eb6d90f438de49455" + }], + "txs_as_hex": ["0100320280a094a58d1d0b8e038304ba07ee01d202c102ec0116d801ce0738820a17337a978d77f5d4a18394b7f51db488e0750a1d7783b36de3448336ba450280f8cce284020b68d4089014f80703c801b70baa048001bc099712c6e213f3d4af612ad251ab6113ab2d372e14ada5dc8aa1885a8aa50b6a331b5a0280a094a58d1d0bd001f103fb04bf04da01ea01900b9101c3011d1f88f8a8d9f23e17e3fdc6f016b205c437044b21cf57e795b1ac527f9dd5cc909702c0a8a5040b60c80ca101c20eda028e06dd0ddc0fbb069202db1bddfb6faa63a63dbf85d5aa269f8ceb6792d800cf380aca351d7a88fdea5b74ee0280b09dc2df010be305a705c2089006fc068b09c40dda02fe0fc304c007f8d87f38cfc5f5545baf06fc6c9374924497604413b7a579e00d18301a25e267028094ebdc030be601b2039203b535d61eff0a8b18ff0fd327de1aaa0b0b209585caa385b2e05bc19af684505509f006b05a59eefc1076fe7e7d7917a50280a0be8195010bcc1eeb03d4048c30d302709204b209960117458b5fca06589be976c5185b5f08b9f5f60c8cda546aa548b7afa3ee08cd2145150280e0a596bb110b8204da0365741a75ea096afb045db1065e01e3d4eb65fd63b8d0896b6d178366be439f160d588463e5b03a9030e869c70280a094a58d1d0bf501b604b6024730b102df048801ac0c49f8026566751ea354cf7e92cec883d266c540e5941949320b57b6297546676fb94f240280d293ad030b970eba059f07e20b9e01b80dd409862dd513f42b8103daf286a570841e37683c58d0342f1cf44b8bf5442bfbb9de703e45330761a5d60280e8eda1ba010bc803eb07c905da05a801e1174eb6078409af07a918c08debe40a7afa705a96156a6bd660de5da981c31a5eec2ebb17d675c9e870150280a094a58d1d0bae01c3019201488001af06a904d702d00501ef07b06063a6c667c97d3e7355aaa56f5d87e45cc9da1b958122b94952b995a7df2302c09fab030bb402b811ca03d50334be04119a05ee06e403a824b3437b63ed0d550cdbce557e9e20ca7c94dc5c241638f2589e7c61cf57f546e60280ade2040bbb0aab03a803971eeb09e208e7679e038b01cc0130ceb56bea2d4aa428021d8d6120ebf80d42df6cae882e3d3353472d05e78e77b40280d293ad030bac16af11a512ad09b90ed116b206ac16e20145b628b8f7de03726e195f906a6f7455e279b45bf116684eb48b25e3e653a81b38e5780280c0ee8ed20b0bee05d808f10ba803cf05d70372bd09e6038c01b40d14531686204cebf33d64c8ccf68c3d4860841bdc414bab232e7b66a46cd6b3350280b081daaf140bad0101f01d83048c02b5030f9004f5018702910b311c0ddcebc24e7d54d725b9558bed562769a3db4a36e4ec563d5a10a348101e0280b09dc2df010bbb02ee04dc0441f505b413c710c605940dc005dc0a8ac433cf139f78db1a63200c004c40c7dc82f772ca83e57f73fa28c443ede9ba028090cad2c60e0be006e101d6029402b0028e012b05940f8604a41b475ed1bad6e1b7cc14f23e3339984e1040bf41dfdea91d92972b66a4bf72c2bc028080dd9da4170be70613eb0a3cb507af02fb108704a303f9058102b9d5accc4e4973906870594b5ad97f16a45a802dd276f20af9506c498585e93c028094ebdc030b9701bf06a106a30fb70a802ef209dc0aa402ce16cc65a357ae4548f9fd11bfe47c31220921f4e96eef952856db58ed4cf89f322ae4c30280c8afa0250bfe08d504cf0ee614d332c018c409f909f0079113d26b7eb1b4d05c9de0031306b915fedd14fdfb589cbc4e15d531ea902baa42d6ba7c028088aca3cf020b8e09f109a20a13e101a607e60bb6020fcd02ed1847f8f4cf86a1585c19c5917ee7a5e3e2fba3294d164e0a11080ec06cc5beecbb0280d0dbc3f4020be102a404480c8f13a21de406cc03228707b22ff110ac0e87fc49e2fc857e8e3351d9f8e538dbdc18cd7674fcc6357c1a746a430280f882ad160b9d1da505db16c2098b01bf04ff0832e304f623bf1d86563121501def13ed4da0ba1d1d16dcafe3cfcf87882aeb990f11192a3919c80280bcc1960b0bd907dd01f90c8e0ccf029102d859a414568c0fcd171e6c03f9640648c04ffebb1849159fa078521690a561af00ea998947566c86850280b4c4c3210b3fed10d203e907bc03ac1df408fc068514aa12991b6b342f9398b1525258fdc211ba1499db6c7cfef8d9739223f7d612c171386cb00280f8cce284020ba509e901b607ec0a8807a70110cd10af12e906a0041a03ea7fe56248001714b2a5f8ec45e38770028c574b35feb0861c795b95643a0280c6868f010baf068403b729dd03b703aa01cf13bc14f70fa736a30c068b21594b115a747eec6f7364fd635508dc76c2bcb4c7399d1c4bcde9b387810280cab5ee010ba001c102b3228206ce06d405d806f907bf14c410f53f094c30dd1de99a245915f4a4913cde2ca48653b78824780fae7df1c97a5c1e8b0280f8cce284020bf107a11ccc0b5ac904af0464ec04b0021bd612542abc427d7c35c991ebfe8067db68f5470720b2cd821e1fa5f1a2b00512a672028095f52a0b8703a30596059f0bb50fb825e304e12588249115e30a73d179cd40dfa9e27cd4939f1c2991596f91bdb5b58f98002bbfca49dbfef337028087a70e0be302ae019f0d9615f003b003b90182058506c605b970b15efb3ee06b37a3986f865a08e278544746f73780dfadbb849fa73ba1613ee50280b4c4c3210b88092ca81db8118401d2019615b005b513fe01c51abc51ab789902924ced64de0175a677586a39c12a4f0db51d5925dca5886569020280f092cbdd080b88059104a701b602b105778b0bc0053bd105eb1e47b61cdf019e28708e1c21a99e02ad0dedf262034951ea00a7c1232fdb14529d0280bcc1960b0bbb0b9518c304d53be60fb704d21ec6079a19e90be701b2a10d56c9145db527ac6004ba3b3f368aa9ea39ec1bc381a347658b288701e90280b489130b9702aa13aa10dc039929921deb079816d30bd604c4086dfa6e146842df153f875fe92d84bc3fb3815d2732e54c3e6532eb5276f526860280a094a58d1d0b970116a407ee010bf302d407c2017f36dd09ccbc1eb8324dcd448c13260b34352ef5ad372b24dcd06e71f7bedb6cea206a190280f8cce284020b9a0f9e01d303e4028c028101c90dfe035c901feb071421e9f3755ccfcc1569fb7cc106ec299f45af10c4451b90b5ddce256895c9b602808ece1c0b09f709a812fe0931df09e50fb716df1de020e21b2816b9ace5d720daaaf5d34293b6c8973b6066613267adfa164f4bee113a328c0280ade2040b890dcf0ced09a814810680021acb4993169001c414c6061807a29263057f14c62c7f7b4df632131615ef639f30904427794544f05102c0a8a5040bc802a702ff01dd01941f14aa06dd1dca01a009f310cdcff48bc19a81795d9d72aec9cdb18ab47b73a65a23dff84385cab06478ad2f0280c0ee8ed20b0bc301b10ddd03ea015aa905f70b810ccb02d80d018d3f55d98e85afc12b74011ba68dd2d34452eb157b78f9e3675640dfadcfa1dd02808c8d9e020b852c8802d502df05dc06a604ae099827ec11fc0db3210e5f3443b035bada3624c6d645cfbc432bfb53ad67de24e393fe53f5189a8bdb028090cad2c60e0bb409fe08288b109d08e4014af7044c8e01f30acb66c22f1c2f79d5d826aa85b0a3ba081a30444a553fdbd12fda6c390347455c02808cee891a0ba70f4dee0dd606fb1d8501e31fd7128f04f015ed024050873291a2f4a3c44f4cbcf51e764f1609c8d59475d04b8d0c289cb548543802808c8d9e020bcc0a9505468b0cef05aa10c2039a0c83159816f148683614bdcd4c85acd80691a9584f222eafdc15925b0ebe823cae53998eb609150280a8d6b9070bd903a00a9204a614d2058234f40fa01ced0a8b02cf3ba3be100329027c704f12652919a56508b2b99da4d9cecb8bfcfcfc015200d9d30280e8eda1ba010b8d049403dd02970bbc15ed0bd701a40ff601970cc107952e20e503fb840247a305d39a36aef642d53f292272bb21d141d40117b104410280a0b787e9050beb038105ca20e502d202d301c707ed01c908b60ddb0443450539500506a9bb0fd5b408a86324ae2f195b20bfa1ccefb032785d3feb53068092f40102298c6ce060956751984781bf5b9ced27595082232ad48aec2cefaf6f010d5ac5808ece1c026a8ce1805ba113dcef4985ffaa36837cf8d84ad9f6fcbd515ce5030123be78de80e497d012020f19c004a21f85e987ab567d6d1c484568cf05176debcedd8649c9ea48ca5e4780c0fc82aa0202fbaad619f98d23e216357211cc7bcaadd244b33a0e4febc911ea0381530adeef80d0dbc3f40202bfae014409db5bbb21cfe04224b42a6476697df719ecc8b0d8ac65245c05482a80c0caf384a302022898f95d657d0fb76ebf551bea861d63657d71d53887df7f2aaa455c46488aaa44022100cfbceb09619f4df80296d06a7213a1a8b2604d62b2c418ae3881dd5edd08634d0169846e2d8735844e453e3474aea7818e17fea4d765492d1b40dad9990092b12c6a0dcd4e938ca29e42e4b34d175e102e9a0772544076f3389f0487405e750c03ca593970aa741d1e464ca6ae500d5421e0c10d07471debebe61468ef386acc00d6ce0bcae2f8f0d268f9ba3b1a08b52c352a4553c75c0a17ef6ee4f0ebf66b0033cddf3219d7efa2d931b65b204e277c1d34285fb0953337487543a12d4f920801450504241e5d8aa00fc9ac7649a783f4caf3252cd25c5d83164fb817cd4404e1af639cf9623391a1fcee5cfa9cdfb2b405280f507fe5bc07203cf4ad693105874aeb060ec0271f3736cef381553a161df8ff664631a6d9de7dcb79944764055f7c6196725145caacb487bb8fd1f26c973fbd319fe2c0574a46ccfd71d31f0fec51ee4e57c717039e855dd4f232158fbc9eb0e12820bb516ce273533666f20404759f57adec7ff5058af92ebb86290761a822e2f2dc702bff43b3fd5499a00007927efde8ed18cbf5a60570f2513e6f0a57c8020a0c98662bdf93cb9abcdd06ccc1271456b98d75bfa302f8e43af99e1ecf40ad07433c3b44d6648212554809a39c050268acc6b6748c6ea10c5a3479f352f9d4232c6d8c1756af71488c950236540a99478bfb4db3e39eede2aec4258ad25ada907d2cb698943a1b18985406d52de9e6383e38f7c605b3cca74baf64b946493862a55f593fff9c0c483e80013e733547732d257e3fdc7046de5b16f8d20d4a2c19f3ed5286ef02af71b418054287d6557b467f4fc87185c65450aacc06a362527b8df70bb65ee56f9e6e490478340491a200f62429e3c9b5f548f6f15d15ddace34882c7fb80e7141e46460e11e9176047e8fc9807044001117f06a304a17f29a95eb055f398beaa273c7301f0c448a3b727a899ec0a1de0a88bc27e196abba2491c761c5d5f84b0e7938b0d37910c71036b605d1ab66817bd5b8ab9173f01c149069f2db090e1e0485b4d03e148203033f7ee282151d2ef6dffa070c1e6725d7aca0fbf96de0641ed4bef003c404f0592faca6b668c8b01447d68f522740799acfff075ee6f52efc3f9d3097a5a2831d82b7cda9967c61d2b1efb7f70aa2cb69e705ba79941b549d0ab82089b7d4efe47c77dd9e097a6cc3089cfc5b9adb80572f4f05a7017763f7aa9820bdc62cfb869d76de9a8e81392d69e38960524395ca2a2cdfe871aa47aa161800d47d687cefda3bb10d8dbb12b274f963a047d50dee1c6fc302ec81ed4b94fdb0be0582038ed01d05af131a1910ed71d2705743cfb7189063924ce65b5c11f3000db6dcb2f99164483dbcfc47ea5bccf58ee92ad7db808a4e05e7250b24145470a4c4a9ceb171844a84ea4992001c281d258b7c175b6bba6c29bc3b0d9a395f20c0e96f924b35c7f01397be858c35e88faf176029a8e50ba1542604713905805081acaaf2eab50e4ba143ad2e6fe45e1c970568efd4638c90d8f4238cbb1d006084da3ad6a68565556f15d8dfe159fc13f58ed4c9e163e698a6c080db1dd85460680bb5a4e1a3aebf3bbeab1559fc8c5c0748252661a744fbffea38900f4b9fb0ecad72471fda1ab42c8383481204ae2435aacfd1ed701bda686ef27a32df6a206ba02337f7d9be4f53e3e06716dbf64d06a022bab0c22635c46d7f52525bf010f0859668522427300212d7b3ab0c994cbc0e881be3aecc75502b7cba456410e02b122c80e4015618508bcefa0e2a9be929c211494826188c4257b1623ecc89604754166a933905ea4d95b4a85d0249f38925e3f4116001500be4fba89f2f0f903f325da9e116914f8152a45ca3223040bce00f5a46a362e900d8d6ad8e07ba409417918ba1fff2880a22c64af5293fffa2e72ffcbbc9a34bd4866a499c1c789000251c183dbe62db54e65e1e0a69eaac9dc40e9d222aacd39b8a68d2bf4d7020d0309a872502259fcf837f883a1b5641e15ad7e684231c260fb0cec43f6c5150b3c7f8862dd5e98fabb4666b064df08d55070135df323b56d65e2d605bc8d6500e18bdbcc1985075f24f9a21fe29e1f86ad50c76ab2ffcfe2eefcb5b479e4b909dbbfa023c535c621abda1b950a0036270d2dcbedfccaad999575d8e93f0bd4048362c94a00ad912386405bff79f03f4a989a64e45790b9ae9f211b772fd01f035b7fd64f4c7ec6458b4f8a5d547b5fdc3e56baf8f7e4a72a32a100df6bf46b04be14d7b690be15fa54f5c63c33c4a8950acaaa216a0cd65f01d2f9697301530159ec2145917dee8647ca4dbd9b9f0ade5a765e47dc31868f44edc402ca34e201da82cd0ab78cacdff8d4c4ba4e317619fe4a9b7bc8aa85be3a60b03ba6184b0acf7313d37286a02f0f7e704870307edce7fec0ba6e78825f13404513902957099fa17ad2642de6e7c0900f32788dad15e374e84eaf27f27f942e40bc04404002319b39b729d85c342299627c900e44b5116adb00dba96d0cfb319317d1d2470f2ea97058f97a2d3eec62e111c01c23caf7da1a476d784dc7d8a66c3dc9d84803a13b056b1d56ccc4a39fa62b1fc487780dc2572cfd405ec669ba20695f408b08e7347b4ea728864b6521e223bfa218d8e2afedcc303ee163a5f923a73e26f80b81b06fe6c9f131999bd94b13c415bc09523501e4de7a9ef8a09cfab3b812a407161d024702ed65ab150ec3e30531d4852b3af10070796bce7258d7fe04d9e90a60a11202ecb7489d1868149f08bd58c712ff952ce19512bef69da88c756e5c088fd72ff876b60cf23cb5e9688b688cf5067fe28e29feb58e6177c37a0de6480a4b5815bf0e224838c09c23f2c47d82aa81aba74b1eb34f49b9a9b24988b93706309c3cf3c9a973b4eb9dd770a4c6a5fe96cb986f7ac4ca7086f7d1581ebc9101555ae8e5dac0f0dea8b3e2940616ea9bddc7ab6d04f85c9a0bfee6d76fa8b90277e6017fe7f3dfd06f405b34a3d738cfaeeb6757a491d9830c26b96438ecee048c55d656111f9104fe2c9c099352863605c621af88b07d6697e7c9d95c001c0619505bfb7bda96a5253e695ed37f73aacf8657ccf1b36619c002b8e8cac4c0064619bc51bf16c071647a1cfc0358116a3bd55be6a0422c275924363ac5dd4c02c718053943ab5031226ca6e78bcfe08a30a73a23b7de10ff4bd77a7171d2020c0f728ce9c177f300df5cb93fc8067eea986917c2a7b66e103a85739d6202070ede5ddc3af520fcea9add26333e4e593645247f374ba58efb8dd0a1fd7eb6330f516d5e390b105ac00f5d47a86f92f7d8e5e670765b5d4843b56f99d949db070c23a88eb899712e6fece332591acc5e273b656b0977523908538782dc551b7f0e06888b0795846081fa2a7b916ccc1ebc6d381c7dce33600f8349ad6d56ad550b8f7dec2168a2475dd9f51963f0a28c27be8269d6781682f1c1e93daca97dff0e741354b27fe1b4e97a84fefaf61b4a7bd2c3c2c09defe923aac1b97664385c05339dd0ffe49c43eb78eb90ed9f8141f2b423695dced1ff738e53d77a41f20a0e333e966b98b33fda58b83051f9797e4be00e651d028f5713ae7626d31a347306f0fcd2e65e35d1b5f650f5507cc1bd78f0a1dddfa2413c6934d633ba9016c00997aed52d0f8177f9111fdb060224dd4613e6ab8b02537ff5a2139f9f0d7a900f92ffe9f5c992862900b95c655e4f523dcf8e3f2619d3ed2449d05cb6c1fd140a016a6a16ddf97c78debeef876f6cd0fce3a92da23e6b77fe9817b54156a9710e0446d1080f59f9ac0738a6e799da864f92cd6bc2463f65590bceb4dea9e3e201cd87351e4112aa5b6ecc6b61655a4f795d2b201a496c4ea3736416139e9fe50ee91f79b3523d2416832e711fac01f50ae3bc479c2f62a7226be077009d476507ae6d69ed59b870d5a096acccbb79efacea1627ebce3a52734801f05ed190ad07699958868b43098498d4a2a6cbc194062a90d2a00ed3675cfd241b52d08b3c067b3f4d3007c0dfc3f49591497709ab2cf91aab2314e348b184e14b154e4c2b0bccb896dd2bad01215bad22b3b8ea46f593c811bada6efd006413289cb0844b0549f40b7162230981f55aae00474a1dfc9b88d4d4d73c82d47233bce2a5e3bd09b8832adf236068e9bc9c14e84c2eab2ab4a7e38c5980c66c5017dc22550f0c01ee9193ce682789b08dd3a34f58713a1bbf28e51efa3530824fe01a15ef17a500b8c26fb9a4f04b96dbfde313a8bf553078a76c90d86f74195666dcf96ee6c30c3826b0cb988deaa55e0cbeb7038785eb02e5f36296351ae481d73701b2b718022b4e3ae882c99ccebdac4a2dce1b1271b7371caf0a515ce60778221149e74c01b57af115a1f988687eca3066724acb03195d7056a35f458c1ef3fd3b7e395b0a628319171751aa1e36d90ad776df87a7ccfd9d884663c17e54e784c6fbd88c096cd80dd38e88a27406e5f7e3d7db02c343a052315db9c4f7d13fa91e135c030b81b4b1d07fbb7a2eb71e1d0ca19ff8953dda87a6cf8b09044fa0ed934b914401ed6ee0a8ddabea9a41cd6ac043e8a002c1894883c7d58cee62ee879e4564440607bb71dd3c8f742569635f535d2b367eaadad401b1eff08ce5b70c14e2318f0c645fa2e2ca52b5a481e568a8257c98af8e1b5fdc700ebbd11b66e2f77d35f20fd2c6fd6bfd61be0d008d8a70c9b97c843ac1818ec62f82b1ec6c9245650bb70e504499ce364042f2a8263e8548bfb39aed1f82a510f6261dd0744fdb5800b90d41cf9317a50c3da4a3c4c0f3fbe9c4ae2ab32aa9a68500ddf55c8b3f9dab1b0d69a50ff0b01fff185988de23958fe983f315521e9a8be8f2cf7a2416f425ba0bffecc339e72e7ec4f3b5094eb12f5370f22548bc7a49d5c8df9b611dff9e7f014a9bfd8ede962b10376f6f97a9e63ad2cc91249c20f9748499960988dd28890d537c43f430cc2d9d25667058789d8f234762bc3e4cc267a494b56b90fbe126045cc122b6a4528103152b5772be16c913646c8a2873d2b36bde05c3f580b6100f42483bf756eacc7a76909403e91c7e2eb9a853899e36ca4d653a04e1a620d002d029a6f691182c3a6e2f74447147a56175bbadf5ea728a89c2d417a0e904020fcd45cd89910a7a95c92824365e96fe1e7d129c8f4096f3e4ecac80310250f104e9ced98f807e1f8816496e3dedb594e697f23f1934b92e51588b6bfceba2f308de21d76d2723d085a2441c4d329f6301ae106afb778a9f3d12184d26b92570029c60c718fb0e3308e988936ac88eb97bd90d510e43aa7eaa2db7bd930f1a8f078caafb24300e130f44eb2ba919875fdb72a2658fde53717edbc250824940300d1507cb5f9b789b30f35087a0a3cc6dc201bf87bff15a8583e948cf6711616f0e12cdb82918c430f5a6c90a5d4ff6c579157d59d326403c85202ab1ba32bfad0c17101b050267cea5bc80f757bdf4bad6b0098bc478c4069694c476ad55b9190b765e0d549af577724e8f8bd5d237295827c524ab18c78c9b9fdb499c4ec5b30ca611f3954f33b0f1dfc1c2e03ff3b1a8230e5741fe4915cd17ca9ff6779eb200531e15b7bb2992dbfa6d9ead2767e5e9841dd617b537e4ff794d0eba9c59970cd7e19a5b5616e2db53033d27eea725ecd4cc69769dd436a4cbf67c9cbebf28077ff011c3de057959cde5f11e82ca6a60bdf6bc7feaface9523314a877aa44407b7bc9fec07050bf6c1af46e0f0eca56764e48d628966183600f403d88bd91e0ed5023265cae995736cb1f59de4fc5611e336a29b63f2668d223496fd53e6ed074b3826406b11ac06d06d6563206c818699cf3e0299e908d184db80bcf67627000f5a5092898a0e0b2f489d142c277d41455e7bc4de17730e390167507de8c10c9fd15c67cb07726979dbdf1b66c898d92b26791eaa1df8c0b9559cd831c6680a36c66c2dd0586fb56adaa62a5961872e104f9918d9737bf9bf0b69cc3a623f061b32db1c82e981874457ce1c9a74b0df3b2b54074e0616d865f4cd9e8afc300d1ee8e882ce5b06a967fdef6290badde715617309ed0ac988a7e96e224561d105d94318042177efc6bd3fd32945441cf0fcfd6c76accc73c31659469351c8510371316a803383a0a332c496c01d78a067826a9aa15cae571f8dfc25d0d16cfc0b0e68bb78275e1274c098a4f4a762b0f5d546e95231b6eb3553e9d4204aa12600118397ecde05e3646fcfcba539e5fc8fc6edcf397d0e9ab974af6cd1f199640fcd206a75c89e25f993df4dc309859701fed33826724841b0b9e4eea224d84108417830c48c546aee0492dce7f8b194ea9ccdfb7d060515a43fffada0b87e810f102e46cc3a446c68f15ec1c88992fb1f1559b0ab9f0d77bfebb2506fd4ce2c0e992c7de91602a576e84325b6eb4313b0c2018978c67a2e3851c12d6cfafc76061f0e555919b5b95d4663f5f207dd9c700bc60b2797d5f69e182319d2203d87080c6fa1bbfc6143e1274cb67ef8245753e890fff17f061a43ebddb4789330c80d4f4d547fcbd603e271e2a9f4a09adbb8b98407cff4abd33a1497670225aae706dfe4db241e69710d3eaaad8a3038038468f7679421ef83a12dd53ca90a0bab0048e344b7a763b3c3c967df4c8844128d369e6efeb6408a407052b589a28d6e06f2ba6f6c288c64b20d322e1f82be3d00c5862be40e8688728bbc040341feab05e26a200fc92c7fa4311f51d5cb0ac6d539adad852c36cb607f1472b0df72bb0b47def2d8dc1c9ded2823e21c02594034a365fce8a1cda543f70dc3b1f74931086b6a2e3e9836afad9c5b424fc7cdf265afaee5c331d3de7fc65101e35be0940ed09c5086e697431a28acfcefe5fa4cf0a93db4be8afce764779ef0206e565f04ec69ed13f48300387eb3f0bb0d9f19139ad13831a5a20c0bedc9dc86d90396099bd6e18a9bb4fe4f9b8a9d495c70606f05674bfcef801a632246ed422c54150250506f3ed67f61900d1a192696e1c368f727ec0962d932d05c988674777a7706877d976871526e897c440415a13b59f787e947e22030bed8588fd40325cef90516e91a6d257687b5a31d9e68388d09ec14a7d6c98c7a62b4ca6ad02924ef84053b1113427fab34cd447fd5b6f416b9968ff81dddb14281f37fc65270058ae308b838aa85004ba91f441c874f28574ad2b98ebceaeea29feff2faf4c6376e6809c4d871798c4ee576e4956f158fbd5b5405e3b68a9de6de4a1b2263c4e00cdf0d2fca3b1b80c43b07faed51f264a0b38e08a4b811f248dce25c3e451d35ec960c6c88a8c7eb3cde743c3d920690488d424a9f90d50976cee7a7ddd8f362070c02aeed5ecefbf6d0ee32855edda0aa8be128b82550549ecb05ef09f67c664ca009cf827bd9eeeb7289739bb6a50f783bb11035fd828f190f16b128f461c77e7b0b7c4935632d0e76c313d8a18828ed6cb5a9f5ab476e738ab898e0b2b2e4d635037a6d2087cf178c0e12e93c6b1b34f8e8c33f84f668f1ea8eb23eec2386dcc00d9ce5a132256af1129c6ece0ac01d37c9b5707eca846f9992a02dc3e80a49c902cfb43a40ba7f6cd02db21349634f05261d687e8c6697150e10a670beffd8b800f76431111424ae54e71786ff91c671bedba2bcfa40e1d2a557a42e2e14b4920301fa5c9b249a9b694e4402b1220125417dd9763fe602097b617545d9f2f986021b7b15784e416689794a67fe5c20bc8ebd0f9de0904f14b159804752251a3001a85d0380b06d1f9a3a39d901f6efc969e36de399385a3a9cbbfdfd673d2ecc0e1a4175a8de57ea360f37e878e9fbbd3cd1ea921e53e9a08662a8816de8d4c00dc41a81e9e178904a243d235f05928c17056aa265da5ad0ea424c4fedf11ad9058b41208b5fc1ac621b5ae568849a805024ec77cc4e3ffe46e12a839579ee92021c4c8bf46dbc0bad1168fcc38101f8fd9ea9b402aedc56fa66dd05bdd49f160f5a2e683d12508a290bee3e04bf5c20e7257e45dae2fb569599133f22279dee04fe80c6d328b45b325485f6b13cfb434fc694dfd4e23cbfba4887756c30928f02146d598a3cd7c7d149007801cd8d58b306e17a8efc4c8af3aac9c382e383ab0b0876657df24e07023db8200f1ee3c91b17afcb5b2d50065cc732c7269722eb0f9582630a778a0242780cf82ac5c883b7d50a15b429d5b89d4addb79819241104f7e3ba2b9be4a1eed8b8b02585d88e13469e480a86671c6c05ccda6ad792fc03470dbc21ddaa125b9ca30c477d577b556059b3584d3656eac8c98612f8a13c009aa93d654a6248b9a1a0fad3915e4644d219064e4085b50311826a86ff9155058abe5be66d7be3b8da0ddf4015e46ef3e71540eede695e7500aefe7bdc3974069217cc4a77b49b8027829a8ebbb612115c174624e01f5b1a63a3ccea731bfa0ccd7f65343f56c150529a559dcc02f27208c210bec3caa62a4b5c6d5c84f3ab0fea2f0027390cbc69b7a6cec9cf2aada471d52d9a9493698f06eb2dab0668600c8b686ce540a7db93eb78884ec28408d7860ae3c2b41a870c5c03f1d9d5f43907bbf697485ab49b07ebfdcd6e15dac6b9ec05f9530b6bd1baa57fff1905006103b27169eb05859b63e6e2a0b260b03c725221d96b4664b43725741622bf53830418d8aed8b335f895853438f165d07b7a8fd8a546be1e927247b40e3d0d042c0c0b2c5634f554dad27b64c475b856c0bdaab04cf4c24c670b704b5f30480aaa024b67627fbfab215fa804bd66105348041ce724b8b6f426468d9053ca2258ba038e73dadc56bd2e36ca687096befccac06e21ea13d53479816ede71f1ed146003ce970c031c71a8154348bb139072c039c171e3ddbb0f0122d6c8428218a5ab046f66003eabdc2dea2a9847a8edc68a30968d22d0ca1c57ffca37ced0ce6fc402a3e256313a21d22f445c978840a8197890172f7959cf63221659f4c57e526f07dffde7949cd19b0e1651c1c4ce311b41057a324c6c35e3d6f160020991004e0afd17579dfd424932818fdc0fe4b902ea7f25ed972a9c82656511cf896ce0d809e6159be7029942c685b734a739b103267ced4a23485d5cafa5fb586d7812f00a69f3a6cd76860a1312e10c3fc2cefdea1281c35e59c41ef82189fe5c4ab40c0e4e5b1ff4db6653231d6e3a409d410ad9e8111d349ab5bd426c4adc014812440c1fa429dfb154161bc0eb6c8272d414e52e0ff635f4df0148c7013ef61d42190b1e5af3ddcd74ebebd04888b5c0e69aa8e182a6942aa115d62376398cb0812b0cf5456b753aba3d0a4cb1c584c092578fdbc0a5dd267e4338c4b217fc66230e0ec163afd9519ebd2fad336c6380eea97fc370fb3ba1a1e112e4e3f2139b78320285f0dad0d638c0c96fec41b0e847c4ee1af7ae5c4f8508229322cb5fe244a504d7e73f4dcc475c52f36f088de04045186202893db5079b417bfa8d52cfbda70f76a66d3833f6e2e571147be765b7711a161870199f041d6c40692c6db7678e02b98749ecb9ed524ebc8c1f5543f55ad495fd1fec5700cbf34f0f66bd7b42de0af4b324887f456f4ed04d823835b3c4287e8091b2a0f7121268803b8e7cab470e0a3c5b90cf03737a6b37f429e0c97909bf50b43b68f62bf0c59b60ed947bf0055e57bbf19bf315b7c8e800ea19b5bfb3ff2410f4b01001b38d2701696e0c4a0e8d3be3bc58e8b92485716a9232293cd6cdb029b5a17bbbb2538c7b42afedda0437291f8d686ae07b5db356b6ffa12b34a9c75c466cc9066dcd32562d0ab32f0a029ec480880e9c2441aa124b37e00a412266e84574b0c77ad0f1c0fc4288d4036f707c19cdd1363193307de12e92596287c529a25fba2b3d1aef78e19e156f027339482d190f9bc158c4a4c54ab19a35c59aae79735ed55094fb1825f1c0220c6ebb33a8a808768d83c8db456fa7d39aab7de61a01bbb7ccff15e9a1abd3c80a9c2fa6d867e73c4ce1682714cecd1f51c3e6ae5370b9ef64cea2d696b86c990ba3c68acb1e717050d401cc938f4a48ac5aabe5b66340339688bf90bf46d8070da888777c7e06b9b2909c9439a5d34b46ddde0ba9da472ee8dc7ca6147f84e70106641c7da5667825d50e6881a8685d7d641011b2fc4c5e13e618343fc415ce0783cf3cbf1a0bbe8c71252126bed66e3766175480702b0f93f2ad970891e45e0ab3cdba6451969431984aa7871f63f37dc3d1d1a8f11f4012f94c0dd22580af099e5e754d6f52d90d39f6cccf5f789ac90dea81b321674795713bda922613dd0c87c5e7842ee57859678b491018952c26c554c39455f40441a09e897c77fea90bf2a0e1e1de0938ed8a6c264ed9e2014f04f83928ccdd8df08ab4b55cf47fd2014d9df27dbdcd84bf7a01ea350a685118aef85f44c0998be5d60b322a007e570cb66a44c1ad4ffd989af6d1ed8921768f67a273f37df0eb83be0335530c2b990781311897f04fee754d7f8dd766d850ba42e01737302b0d3d265ae787b977a4074db3b8917428abfb674e5b1daabe54c59a1e29a72d97936bc9e4738041e30d02e2973484ef9b4db2cac3e07e33e92119c737b63f9d2f6d69b77677e5c8c4030e0d1efcfa5c8cd7c499316dde6b8208c61db3fdcbfc9cc4e7590625e0906918041aa2f5d59ed58c6a60dd6e6cbb389ee61aff5a0381ef0c59233806dc0491bd0acd16f65f3b72c9cc4a4c8090ec3095f6cd9af91bcff2a35dcd798dd9fa21ef0c06abbc93bd18c3701e2bf96a2d61d4fd1bbeefd42006b60aaa23e22280a23f010ac8422441dc9dd98463a93631dd4cc3b519183233d69aff71bed43c7a98c10a66cd21c5ed06b47dc4346a4c62d10cdaca8e57627e565be477a175586759b90d94147b187931d9003cbe1ae05509d055214cbe2c4b9d1b7d03a04559dcebab0c38654ce25f78a3efb41b33546d0b25b68e031b2d2c41aa3c4b91bf76c9e399014b282e8aef896c9dbf1fed4d7d444f76ac022c9ecf9243098e08e46d9563120973a1844a45e1b096ba4ebd8b21f34999a79ec1cf1e899e3767ee0b6b06731c099ac1c4b3d8072943c2afc60b66d9e5f04a9e393b18dc877f931994163c822a09152e91ea5a5aa0b5344bf3d715a41fd3a018d43e480e4d4993419d4d1629ee0778fce8ed694d6b05c53b2831953571c7ed23aeb6326cc659b2c3794e3bab050acc63f6ecc275913efe65b657e0fe9878eac97402a7af3aecb2236d04c739c704949e7ded4d50e15dad9b5daa13d83e59fdf371deaa8f583e0579800728b2e30e6d8b0a32c07e146783a785f445ce9ab2a3ca324efc54ec67a55dd301c56a800e7f2d3b7c52e30ba94ef059cbbb7047209cf55485abb081f17bc4eafe38dbc605cdf46faf138b6515bdeea073e5f2b338b5be44f8cbf990bf55a6688172ae43022486c60d3ad5b91580288e50b8687d9c96ef0ceb573a3ba6745d3e40a735c60433356c5e48583f78ecae3574cce6f26ef787f088eaf040079db08f41a690ac0534887000582cdccde6e7eefc2e47090820ced57648af63dc9b1c518bcd73db000f3c43ba6bbb8593fb3ea812e6a7610ef9b3e518f9fb292abdaa0205501269019ac0ce0ef4da8e59bc8241e6ec2d7868e77010c6d8b71c4cd08b559c98830d0b4075fa7f3347ceba18ffd5a60e65e494ec97ca25775dc2f9a4d1b90154b26a0b368144d1dc539630bb400f5b197d171049626430ac616257166c7e83c44d9506da904ded7f067c0f15401c069a485b9714b7d548ccab1c62a9cde108a07d3d040d4bd6df663161443013f0b8a5d03dd063c22667763bfea0710c8f5e42308804e66219a9c64770577c53d650986f4a9a9beb52f153a04ed4d6330561b59ff002668142129dbe25d802a1d7df39247030fd82a1bf78a6a026fff76fac5fe02e0b920804d95b6715c985e95339a562c3b44da54a4d1c2bcc7de781fd7604460c0bfdef2f66e497fe1d1f009140814a27082547b2b0d333a3ff26f6941b5e1e15097c366ca9b1313b6da3d0d4dd8bc7b77865fcf6d45797d6e5a26db0114eaa56015334eeb02aeac505e90cabc01101019ca111ac463d0d3734500f6386213b3f002967926d8222caa10daf80cb18732be6cbcfa2d827311014fadcde6deabbe70d37ac582e60cd6942c28536cccbac3217839a8adebbf6356e913267b352477409fe006e676d31d8d07d969ed746583baa983f27ad87afbc27e22db08e4f931303559ec3ce5442a301562175d369f1984eaa1bd5570725edf573e2b4ec326aee01bf5af3c9e1ca1a3bb9502fedb9164f075021b1a8c06588193716e819d95c3d0bb01ba9622f9f04d3fe10f65d044dd3cf7642cf2c75538f1ec8f20905a08eb60fd44749191cb104493073d164df943da12799bdc4cb97337efaa44eaaedec8608aecbab8c096aad5a18f89334b5b0cd3fbec4fca3eca05e3f2ffa65baa5e77b01658466dd43bfbb843d4906f27bb2d2c306ecdab34eb53f714b4dc8c88332d601fe9e6b0e2a4de28beacbeaadeb81998aee453ba510acb719c828a7bd4201b80269a715258add43879d700dfe10f99ac42320049e21a44532232a952107a822053e81cd6c893298917072dd67867eeb352fdf4258a8d2dd5495334f35c8b4e9042e3ffc6962b87ecaafe9172ef8cf10d212d2b51e92fcd584d551fd99d4eef60dd0cc89983b6e572967cc2c95c718c247933c99a87dd787414f48f0f8ddf7c9034f2c088b7e154b6947c5f90186045b20174fa6e4627958fedd07d73c47ad780f3f26ab67c5d4f5d11cfcebc3e53138dcad21e687de409e5aa65ba9ea22946806e845ec5a5ed1ceb2213165c978d6bd72abe1d95cac1d43ef4e2f00f83ede920b7c2ba338e4cd487554b27e7cbdf39144b9b9e81b9d65b07dc88bcf94518ff608b7a7d158efd275bdba9bba583a37df0a0d3aa75133d356444a05900bad4c2107245584fa0288c5b35683570a62c260b06de23f324bc6209d59f726ac2c91be03fed158e1ae4d8e64f4da1d1b5ac8457abbbf01cc6c993552bb1a082c71b667001da8f6ebf26eb8960063ca2557114726a8f88aed28791f99fc15e9720ed4d803c0a60abb136712128d1be056e5070d7d11b70e39b75ee5c8eb8cda9b3098020b581862ba7bdddb4267b1423952ddb4401ed81034542bb54ced16ae2116cedd00964393224f8c4acc14f552ae340b1e550448e030ec29cf1777f111a264ee8a0dd51177f59a2cbbf07754ffdc807958b67a770ac0e866769b9c403b848fe64c0049b61c3c40d6457237e5e4e0fbd0dc29430baa99daeee624348a99a2211fa00c1303f89950c17b7fc397ddc12f7f7a5576b3139c1dfb3d14b8175702f3a99805a3ff0347473b0b42116fa331986fd9759ebad2215e2c327fb0d52e541f489b0c46b72dec17de750442e3096802bff4e8e6682a1dbf5bcd93b82e3af523eaf9044aa872ecbc20240c09d3fa3b98be2e5fbcecfa05f217f2209c99e288e052040011693899424a82193f8dbf21e95b820cca365a15be5c90d1cbfdce0aae422c07d77e0a2a72b1d35de9ce2469e5809fc091e9646740c732a858d39370e049740b65a11832f3bab3510218e6d7c32d7190a3f02b29438bbab2c450dff904fca101ac4c8686dbd09913a3b8c8d4c89f93bc23d562a404a1884d146c0946d0e8cc006e0b431f0f1f9630d8520ef8012b6e9a07c5ec8bbabea63a1613c240a040ea07bd4b0707f095e067c06f1338a89304cb5cd1d00c13a0aa94d1e566b03f09260a237f126f1dc4df8596d91771b894b9fa183106d2d121e257e5f74f68acafcc09eaf2307dd0130e1188891b592e47838cf314ad7b817df9f90388aea4d4c5f10511f55bb9ccc213c17a3b619c603923aa3d4dfd45976aa71dcb91f70b826fe90e8e44cc9a6a49a8ebc59eeeafadb2158b18b1e98a07de3ef6afd046d09b837a0c3e473b8312c66b1c71903f2bcda2ff59bd70f6dff531f02c6841db16b4c26b0b1827fd8c9fd87987861940dd8acae94893fc9bea229ba0e5537e5d7a700c1705a8a3bf13d0c70bdda3362e6b82cb46397c5a2be12d8a3f1954d3212041b57d082556bd2fb45d9153be3ed2a0565d47bee53a8c35a5f5f1f3d2bcfb9ea560d40de39268ec6c66962b873c71a26a6a1730ee461fe958a34bfb4de79ae9a016500046e8ce41f6a9ae3f5ae4cf76fa0da73731f7bd6c8e2fbd6111b9c05c382db804a10f857f32cef3aebd7639873ca3670921d8d20ac530fd6fc875c216b9071b022d5b12ac8e5296a913795838ce251afc2f8a3f6a87f4d0503ef7956a508b8e027b02b32da23bec6c5598487b205fb8a7f3553f1d7292331957b3659d9804420adda6b703170636f52b77456b941cb135df8a52ff6273c41a2ec8ae719030b2093a91c1d48e91f66d64dda3e122d6a951c5a7351d4638af78ef9fa7cb997c660dd5b2aeb8385973d17bb06d4a4cbda976582c5a3629ed6343258162dca22f41026f3a4e629f1766b45022d740be153bae9e34538c98bb63c4c57d562d3c1e130e00891988748dfdfe7b29c2388c4e3768745605517cc91530c963833eb303160da9fc6dff5bfce5e90a166a101b9896bfb493383259bd0b32a15954c7dc184108b1dbc012da1b56508f450f790468d960e3ddae76ea5e3b109cc6d37fa26d8903c27f8a2d0c9b55f41abeaf5a8dcfcf46f0f232de34dd519269a6d3ba99ac8f08512c362b1d3f57104e829361d8b99205e17dfdb1ebeaff395710af5c81af9e0e57fd0d9f73fbc989a170142ae3d0a6226397fafb09a892542b387d25688f6001082a5b5eb158fa40cfbb34a05037a219134d21ca69a58eb5f2cbc7febe244a02b7ca6e6fbe34e719b3ba98b28fc3038cd9fe07799c5e355da1c5123c3a7f2308aa5cbcaf5a00f203ded8a78b8838019161cd4f394996edec6cfa1cf043958b04747b7626e682ca4e95ed2d304202468c17cd55141cb62ccc59e2665295da680f0202bdf437a6b0245dc9e3d1e122ef324feeb523292452f6828cc4c462cc6f0360089564717e7594829e0e2c3aeee7840f4273e80d41388a33e2f4025a04fe07d52e6f0c43327b7fc7d6e0e5cedaf5eee146aa8159c23fec524c0c9f0c4ed40d8e051e40f7844d240256fe169cd9f0bcce237f88d6f4ee7975b4dec6da84250f4cf43901d5a27dc0a86cce258b019bdd0fed7a4926846a9f82794ae91a51c9092b00862e0ccf9cd74793c1b57f54afa0370e9e87a74aafceea2903272e7a43072c414c72a5bb412390457ad724733baa11c19eb141a822f15a603ad53e1f23079f439eec3c76c460b5da7179c5c46880ac97c44eb8e8a43a8018dcce460f5a06463a226cedbd308f3591d8082a3565bcbc1fbae1516b43fed2cef31379571606562f87fce3d183d7819463c70c7acb596c30bf6c85b7378998b77ea765da370bf40e0e3ca6e674a161e8652d67358e41c05de354def6dc1b6fe4b91165cc0f0fcc539796e9f7e9d7d65d77a936b0658f18d88dc65a43b8d73176b73165e6970ca6e9cd89a05e9fe130301f068a6ebbe125ca33336c97ac398af18b3471c7900041d019932aad060f237688e0334a9341f30bb2d9293406929fbaed2e7f9b28086f43b5db1a4c67a90cfe423c4693fa0a8f9bfb05e4820326aa8c8a3c4b269403059b9cbc83dba6a0a2f45119447d171634383af35f7308c9922f92127c37af012baf6bec3ca7e5bdd1ecf678a50e59a9f28fa6d6771d86cb023e88e3abefed099b11874b6119c125b4d9d5aa2ff4ecf83b88e5b0720ea3ad909aa4155f19450ddcb5bead0659c32d5a0420a67e526bbed94156ae7b40a19230a85bfaafb3d50c705d35ab9d25141b1bbdf85db60ce2daa90e52a8540bc537a92e3efd218d43029928067babb50da997688e81d7a8e95a62ddc8f272c7a71360f93e779db0d606fa7b2807560a8eb294472359d9e6d20ccdc0a5f83a3d536c984d43b3dee7c306ac1968d51fcd3fa9e57bb23fbfcbd5f96b8febb24d2f5c85c202efaa36f2cb022a987c40bdf26738480b5ab4fbd3c7809091aeb6d522d66cef476fb2b380a70c29695533cf9c899b26afe05d4d8bca0ae2651a19ca1eaf14f6a0344e238c400f00b9fb9c363f90b3c7c02b788d82684d8684dd1d3374784419d1a49df08a960d9c60f7db7309706fe4cad01af0b5368728d82437041d4c6672d1a2c1789cad0fedab3fa318632a26c33cb5b84a39519e4b98200dbbacd9f878e404d6c593bf01ce5071109e3af6724ba4de678fa9e052ee5716fe853838e1f866219f143dc50bbf367d5e90534bfdc36859e0b0816f3c8e27be46dd0cee1a21a5f51be22b080c5566942f30c5261c0b5d0c1f05da2d8756e39132c52b631a77c016d4d18c700c00dac06ab70b1ff2c3a2189103441d01231c60de8d0da5fddcff2e049c960100834e3bf2ec71330f995e40bb94a92938ea63a518de50a28839147fdab6c0880c87ddc86a6f2709d23b13a581e1b4183a54c1e01f291a1167b7f24b81226b2a0323ed1e2175901e8e6e5c7f7e149bd9f3e00a20b450e3a27d86375a4d581f3c009897941783ff5e5677de506e33bb5c58738d84921d04b17de4c7ee4e2592d609a5d999bc8692b1e45dc5d1bb0a6f2280f17bb264de90b81cf1bb03c739e2450a2254597bc2a52413b8ad40ae6984d37ee13c8c5c049f06123c1e05d8e4222f0038cc5955af927daf5a787e47a7cdafd92e42e984d7d736570cda3bafc2ee8c0407215e4e5ffe029b3168c200b9d45ec98c54f20c794cf7f49733e9ba7fc6890dd14f21105930e2b8df5cea5b06b893b27e084f29e19050f9046f9cb6c5898205828e703aed913cfa3d088515833cf1cb2c716606b55a2bd3b1bcf1731668660b0affbb3e8a14480cf42e7c9b0968e996f1d21a8598ce79d405916b2f41849807bf14b0b687982b1597eae78c544289edd9112b0b187f5d3df5a37f1a21226303bb4c306eeee80ee2ac339122e9e54577c219e856fdeeedfd1dc353cc748bf807f98066546a20b81e3295d2f5fa99ec2832589cc0dd08153b352b9434cfe4030faea1f88399a7fa53b9537da32878f33a8592e4886dab653adb3a865c0a4d87050955c691cf546aada72b363e2061b5c9483da71b042d3f3df1985c95de87980024e294980cebb52c32a686ec49d2b93d5f61b606309ee7dfac0f0809879a090cbd341edb6550c7f32825ee88395cd908a62c72221df4d018dade67280db7f30d29e2f2b2f07671796644ceebeeff0a567379863046885b1e1565fc6db4e7560824e314d039db99d39546255f2fb47b02afd13ad365c39e9def2decd2cd16220aeb57ef01a0a688173a4d01bf8d7ac287cc809b1227f9c4299db6346328e38105bc192da93ce60dd5d542c9ba81fb1ea682651f9107a073cb6a9129ed6ed50205d0f189922e406aaf480a1dcca3f0b9c44a549820d4138fbb9d24d011a4313200127f44e29890716e1f8a647c5dde51e55a315a24f198216ac3b91ba9a40fac097ea3948562ee344c729c56ccf8bb083d3c4acd95e2d5ef5b225d3d2ffbc26008f3dcb0c558ce0aacdf288d3697939de41dcdb4625cec800bf8c3197485e3cd08de08750eb653c20ba24de5b8b0ae776a7ee7c24a6c35583fc7ba460038a9fc0eca00481cd3ba39115ffc435fc3b5bd30309d574e66a35f8f3aef6a1dd272620fe6c52811e72b3821200692260924cc50eef1d3ba3743764db9f790b7a8cfc702017ed7df5e13448a89496ad16ba89600a72128cf9e75694edf95724b9875b505554a4cb21da69cc05f521a27be16667a774c47335081417f5385fc80f611f0048f7436ec8893249b776b1d7727b755b4be3b00be1e7d194deaf239497a51ca085175ddd81c643bf700c2a85f7b3d44c8c6b56e2a9dc9d82369f5e2486779fb08f1dc2d923d856b22a812b78e933ade29b7b686d39d1f2b68ba8acde564a6320ce58b46a78c5fe849a905573b541c69ef3cf65cc4c2cc73a3abcb1be9c8b31b08fc05839644797903ebc50ca4830c40798bec71b44562e089007240c859367005fb58d16cad47597f1d3eb9ec252d54bed471693f144f6bd53a0a40a36e5b250d9819d3e3a29d4855b46dad8e28becc69fb492b0930d6223413a4ab4254625501fc9b53e0c864522a841c117ad78b128ec71f06f368c1ee6be33818ad1f66c50b88de2d328c2bf4ff9ddb38df4b8123743ec8357206acfe972c9985f838e4d205b938eee5a59af10395c6cdf84e47b7b41115647b116c9157fb2e8d94cda94b0f1c5a623aa5a827f5a3d85bec244f22504aecd7803b92dd52844c508bdbf6fc06e597340d4660d30a934b4f7ac9567c8cd723d0171f9f3cc638bf99dae6f7eb0362fe04d2051c5952372d687485e592ba12d7916923c86e87757e9d85cccd1404907798afcb43701db7524e6d778f40607f6be7f456f2ede975d7d05c1fa8cd0d5bb9d2d986f8c92e4943be09d05bd8772688968076674786c40800b16769f30c937685cdb3b752b888897d9ecefd8c1ededb10ccf3cf10044918f765f81a5f0157c9dcce7d401299fc4fb104ddf11ce071889c148d95c0cb574c0728dc526b0fb568458d893185cd0ee13aa3a8a4bad0aa9b95d2acb8bd6140fa2c511c521b0fe1db80a099a4573f9a2ac3a53c7ed8c6b482d83f1eed0acdf9eb02f402a68c0c53fcfa5c46932dea2960f53bf8b08efc53e9b19db408cb04793cd5c7f4112d0ebc4c13f71e2e70137d83c4d6320b268dfbd43a90645270cfbe061033bcbd1c0ec7eae1c55b48c02b66c3103560333c10284da92f4641924988ef0e011d41050240b724528a1b577407c7ecb227e030937e2520b1b447111628f3fc451298b203dacb3e2354ebcb886ba6f5da5968a5c79677866567914547cb0bff790ac2350843a5f806da0304eb96ea9b86bc3330b0c67a15c888b747a3878b8550dbc67508afe868edda579ee9a06aa0c0a31a981e635ad31e1d82280200ea12a22430710ef928ab3bfe9268d3bd607802cf9ce875b4c4a125a0a19a8d4a0376f7c042e5026aad7fa69336ee6b85e6cf1af123135b6474422aaf9cbf183a5e528f6d878b0fdf75cccb7d957fd92674075361d4db27bb91a194e37aa2f29203cda126c6f9097e8e1af3893088a8423b1c012e0774aa3473b29f3a87253eda6264501c2318029cd476955c89026dc6895733b2df7738e6ed99df1dcfb65ccf81710541e689030f59b1a598d45d4cf9f4ab4d2f465ddd0b7c11b95e2b7a17c8e5b399436ccc0f317aeab5d45cf6a3cb2f1f819852f6a117fd054e6da29f5e994a8ec935cab102dbc8bd1c3123ec3a4b5ac11e66798ee409e2eb15a5e073596f60bcf6cdad4a036c48fdbca710cc80497161b53ba226a823067ef6f7f1d737892821727d3a99026f2279e69068356043bb85a8135921a7627a93ee54edbf7652763fd88f43c10c16fab47679eec649bfb95941bcba39e0428305bc0bb36e7095417c408930d1058ded10837a31989c8157838fb41d31b00c9f9c9ccd8f47ec48be3e86345cee0819f2c3c1a1b4654ffc6f21e53633e668bc8a22d6f80f6a2e3aad0a066ce5410ba6cdc642f26ea85f9e19fa547046db036e05f850590f8232d5964df3a8b98205c15fbffaf7a4a3747a49f7717756a73afa2017eac60563c7c76a76b08a84010434088450409e337db1585bce6e9abdf36dcb0fb0d723628ba9c9b15e983d6909fe4e828ad65ab944a29af6d8580f3a2cd542fca1a6055099dfb7bbd125daea0c10bc24fd98a445c608c7912e8ee4c9e6b741a58c9877cf433a299213e2d82a0ab9aea05d7ca611deae2c36ac7283bae4e1d40cab9f8faa04816db4248902ea0ce2f1e84172832977bb2d00a66095866c870b9cce2ab49c6563b094e09376a10dd0ef56911b2de4382331b3ca6246c6976efdd34fa85a9752cc5902a14bb8b40ec6ead0bbb8e6deda98b6f0bfa2e2792ccf78f8ccbd0d6c931f2508cfa0114a0d500c58afacc24c93198f3d58ceb97676cf2fd817c9a3c28d662ec199b260b80ab7a9d4e15f8b6acea9493da192611cc1eb96dbea4f61992f5ef0142d11628403afb99c39f6eaa7a8bbaef4c8f713713a510f7423774f53a9aae6c74b38dee103d3d390b7b9eab07e4bbcc2026efe426ea60f58467ca3bd06c66b9983eade5605e8aa6c8d1c37c11b215c5bf022187dd46b256ff546d0b20d325694b256fcc9077eb0230173350f0474646e79e5b2adba59b91daf854c87af167b0bd5730631042118a436b69d1a0f1a99356745b4a7bad2e8ffd40cbea3afb0cd44af87e29409ba547f090f8f8239645fd72a30b653f9c78c52d1ebc9390a5cd17abbadba740b17a3047f0fa04e0fe522af839099da449ada245c23e2208b53cfa310bdc5450da4e91c33065bc9faf5f80142b6e0275fe456cbe82b51b59ed3c8ac1cc296a90e17365558bbd14358a0db55e4c3ba342c89925b52a51ef617bd7dc5dd55fa210ca98706bc44d1fb654433839c19f7e3efd99a23e2b86714fc00cd8fce4c7d610bc7ad8ff9111c95d6509fac7efafc3c454c560ddedb268e06b01696f76fb79a0e6b70666a652db6eb75580c0cd6b276b4e1e1cb0c8957500c6670ec73d8d8df008b3c084e8d676c14a78a4829b06e1c8ef084313196b889baf5bd5815af7e1004f66f823eb013815d6e9033d8b72ac30b7783d7508fab9b64234d5f5109c8ef02b00b169a7fbffce6000d7f9c85321f7408bb3a6683112d94d724471f2219810a0db204091a53d376f92497cc900c7da824645bde9eb95a2955cfdf31bb7a0b04abb4f16d47f33dc83c52b09eafb6c872f833635541f1bd2b90ee5b029576e10a228130da45d574aa4dc10c2a9fff4899dbbb349ac8f1372063dd6066e4629d006402ef830e26bc78ca920130eb1f3d01f510129a968f6776b0418e154c3d2f04f05851350d01f066e6875c76e7b723085ba5e3243bbc07b2a81bf30e2980d50afb3ac1a4c2ff2317c1510f59c44c214fce88f44548d11cb7651c144debd0d101c8d626f19d3f51e07d985ba8ee6d03f72fd6eab27839d3c5eedd632efe8d080ebab18b2ad3fce837dc69f27be395d7ad62910614ad4d42b1546c3dc1bc08cc0047f0a78f07425e6960e805ca19edaa6bc72ea9f00fc631d2832ba1f4baaeaf0da16039aa70add2b7424439bd7689ffd7eb6a290c9295a037d905bffacd8536012e2214546fd7c74426cf589fdba37f03e7b438733c9fbc8c6f004479c405490181ac8ecab9bd6ac8379ccf15ee436f8f7725d4982b1f2775c2b9bea16e75fb0d10de7dacac04b3fbd49c294443c84042e409e7fa45232a23e80345dfe216820b6dbc8e0fcb911510ccc261dd8bf922ba680950e1c8b4f929c9b909b17de02100e8810e31e9bc22d71c429b4e1b8e8e75c87aabacc470147bc89480f604414f0ad08771fe111087af1fd0897b5c7fea79d4ecbfe5c4937faca91b3a8818f05709e59720caa150153a50c10ec946ce050ffa2ca9f3476d64020b2f4569b6b4b707f13e59d13c1d965fb7413bf09f6f22eae906c80fffb91027471b78d54cd1de055e2a8ebbae9f99dcf36b51a1a914ccd09eca4513c8426e7a0e404c9fceebce070928a2ba114651d3c1537401aad243ce56f34c75e385ce6700f77c96eaecad0b124dfb656d0d45d5ad2fef5a98eed1177f86660cc920bc6a520e843d162c1e001ac8ac9bd3e3fe1d81bf2b722760f517b9a5a726952822b7415ae830b9d16a05d2addd9db0c9222092f6667e0a76f911efe0986d3f23270bae9223859414070168457703254683b47b5efd890bb955c31148231300b6ec8fa14baa1b7a292607bc6016ad26b445b52459793f8bf258498dd4d75313fbc4826443400dd793d6099a001a456fc8c874385b31917b5e6ef1a404d36321a26824e34c43108592bb0f395871394b242eb1a6d73943d7664a40db5b5936de803b16ff19729c79ea4b0c23fd52fd52e7027fa9912e8421819d0edf248776cf86283adb5b7ac5138a980d57e3c40be4541e9ad046ee54342353bc7f7ead1a4cffcb6db8043b172c587c08e8a5dda53df6770e96c5d94fdc336b16b28c75aa2994fb48d01cc4a996dfd0077660ba7b31bf61dedab78a825ca9d386b48cb729ad8b604e5a2cb9b375a4e403d78e506a1956782a35c78d3022b248a32bbd7122a285feb561ecd08108eec30d33b7858f0b3b85a4a28f15982cc6cbb42938d9455bac99a9ba8846ecd5a56d043861790f19093a4bb913dae9279d0a2266f7493657962331f5f5a064780d1a0f14c8340828e2af8b0c1276b2933e2b5e63062234af15028d6bee79d08f8a3a048453624a6528d95b137168929389ce8617b98ffdf116d796677dd0f00630470cbf23409f9dcc867d7208684d66b2f5411644326e6e5f17a197dc6af13d13d40464262eb66d0d4f5f84178a784e0a96a9bcd4a5b2919a87f4163c4d28e5d67b090766a8b868997826f02dd60883dd0004e83125b12d85e0c9fccb904cc3788a0775c29dafe36f858ba48865bb67abc7ce57c40af8556707d7cee7077a7bc24603d0b05ab7f57b37ade9b99024c82838f21561e5112e4847a7be8f7d901d1b7c048140b9252363820c1fd78d6eef651b89a2ee64979a9e5f61ad5d47c607b25d0f3a568cbe07fd6e6f5b93abae044f3243595d9d44010de3497d9ee789984a500a33a85f22f78ac137c8675d5656b6597080ddb54f79c6a64cac36e8ee1d63d3024fe8926760cf5fd7af5142aa4d66a24416acb03088942171f25873f59ced790c33d443b5bbd4c5824d1c18161efe3868a54925000f32290c393d22603667d70fdd9fdc8079683130d0b04a3fbb5c65fa6555c73ff09d4fe4330f7b0b5859240446fdf431f5e5f742ebc247530a4dc7c126ae7b5e21bf6e858955b753b2210f04d67d6ceab9e150b27bdde5e41d3168e68ff0740b0d578cd71311f300ddaa14085039b3b3a3c9b6c5c7100b167c8a3b725c911af69aca9de8825330e6417dea05ac3a8421b4f61230cd2fd6a3986bfc535aa68ecee46f7d88c8303232c1efad0c28bf99bfac05d0d73fa555c7bca744b6c1ed9a5b6ab18befb193e576cc6a520ba660344551f5c91d2d34d8952eb91c26987d7cb085bfe65eb2a90900faf73f0ae0489c888ccbad19ff67c4f58072cb602b0964cb7e3900a099ecb7c36ef420031badff37a989537a460b69be22986eea429f44688bbaf709e1315d9a4a4d7d0d7b3577466d5fc218d24c12836e8f8480731b932402fd94feceebb446b1f7780283e96b95e2c9f788a579a78ebbba0c7535dcd345782bb005fbef00258a58c8008f6bf81108ba169f1171823e06c8731afb80488dc7e2e3efb7d294621bd9c40b0898b9fe32e384675c91c4a2afe5b676543c1cffb155f28efc77dc619a9668056685a1bde22c5e3511d2c89633d25932e4d6e8df820af7592e3ac3f17e31c808977f34226ea9ac3e9915be80dd016798e82c0ce0f02d81e88ae0cc19a311260d60150d46af452d7ebfbbb9da8e08fdb78e6f7285611e5c281f9cbb9acaf5d50a29cd1b5fafa8c7665226a29e1da2d0cf36fcd213ca6777af33e66076dddfe70ed416075670788a3da188c9cc128a63e9700be5359463858a128e445386c1d305ac898d9f737d5eb46e7e250e55bcc4c051febc0d85bc801ac0daf9cf9b1d700a388ab323bf8fb603fc594dc44c70a35be0af232e211baa855b9d3f4909fdb60a738da615ec2cff585cdec61a497cb6c75fc9b2eb2c3ee5e82bbd81263d4ba40125abdece13ea548ed85b47a51b7467e3ab7b6e4f0079265d5c70934deafe87012fdc3c6e06399f5a5746e69472b29326bc31c929726b7294919d31e95a86650647d38390f951dc6e9efd058fa65117e8bdae6cb732b715ed2570f279d1575c0c37eab174201de479ce89af32f70010f28c1257a899b881428d3ccafe3c255203ba0f619471cc0678af64bc6d34d169531abeb319daceb3dc02b69732fcf1e900c90c52ae968f05b6d9b149f2cdc6a36081b4d39a8cd4b29b71fe2fa154200303bfafa7764997b39da6ce7ea4bd08c7ca55a4567eb9be8f6afb4bdf75cea2630b86c432fa3119902a07e72cbafc0463a40f8b5e5be1ec65e0a6c3cac6768bc30f4cc5d409ca3d3b52b0370e0945608a77dd215a24a23825de757c4388b08d490f6b5a64694dddad20951c3d05e54b8f34f667fd9a393c2ec037d8f2407853c3097f13faa12400b8e3b220972ac562328e179ec6b2137b8940801d66c85b698f01061dc13262f2b9c8a660ddce46f4309a5c03aff8f8afd50e04fc66e849af380548bdd1e44e50481a1665566d2344ea863a321839fde3089f084397acaf2d0106d1e06152a6af75da2861a93dfd5f679b0adbb5b8e69fcd63cb6846a9d0070606d112bd7509eee11f1dc5b99368f9ec4d6b2556d523bed008f939b0e13bae0203255184de9dfbc62414966196ef9d14ca647795585093482b9adb0fc9041ede06c760cbecb85829fba2079486cd6395edb9a19d1590cc1ffc08ecb4327171fd0ebce2bf1a9c112c513ebc0c1fab77b79d393f645740f966c7e1102221835e3e0d32d04972895f65dd829dadf0181c608016f5301e1145f6aa3b554cff9418060dd999f11a0f558865d52e52de895e34def5c9b0518c52bd0a324c7615b7053a084aa1189141ac9a0da46cf218d0523cf0a59009fac44e53a0d0fb459b10b9bd04ef3295cd2e1acdb2914da8989e70516d52ebc9040603823079484df5218936042edc365716ee40c971f79401d1368419e6d606f6aa8f2f3efddcf0ce1ccbbf08ee12872a91107f322870d2f6e00495148b8a2081359b06e72a6f9acd77635f041f48356b0db6d69e089693cc70bb1d61eab7d9c44b9e16b2119216d2061dc40bbf5d0a8cf532b38d468eae6e115e2ae47894938c25eca80cd83f8c797572f90c35a1b3089d6aa7a7b83b047631b09b0e1f8b7728daedb9a4899c098709bde804f0f734fe3313bf9f2162d6aac06183d979f4e0d076603a15666524236798e60e347bf19c14af3d010da8ae5bd2f9f86b736d9acf1e577facb86110e4d26d580b607771b5abba84e8db50eab03e253a6b88d749e27692e0c84fe5614a5e81dd010188ebae4651d3c0d72d56ff05991207bf25a5fcae91d26192be66cb9434ac032b3d8f61516fb7021deb998b5828763e92149045f0409c23537b36130305ec02a81f9abab3410c57f452fa2f995d16ae8fb15878ee1a11b302844862f300750be635ba2fc88e3dec50a42b08a63b22415c518ccbbd74afa6b88a8dbdf1969104d5fcfd9218b8d438073b9a8364fe6974701858216b0a2ad38f64c7d1f1587b00a9859752bb8d647588de29969a3666637c2ec3c4270c6fd6440016bb3e850e0de45de3688ca9dc7d3b506b3ec58cf70a17a6001b90861beca8f0de0abbefa802a38bd5b97595a8ffb6738571fdc033b26bf676b83433d8d4529570cead86a4086e720917b77334f84194dc983a842228f7295b55ff91710af51e0a32e5e5f406bda9187967611e2f65493cbce0016af9d4154e4c19ea7a72ddb14363d7f9bb0f2905d16b42a50fabf3b2555cbdd1c6522982e1395b4d66b88d22dc91ba88df0158e60fb02e0adf444b5fef7363771b00f936050a42e0b510c57eb246972b4f070caaad364d0608480cf3081e76aa7e0db51185d8ab29f352f36961d0911a170663a1fe9aa5cf89f6f2e0f23f17dd9607568691ca314641d05adf106af83bb70afbace424e390ad374ee9ed870eeb40c0f44a1b3bcfea5a2b239f4f99d1ba0e0c12dee297e09ef4777ea3a8143a5d1b97c4e01083023730d051e390bd76aa0909bcf41ec4436b140dd05ef5b11b0a67433e6b0453dc7014a82903f9ee8bee7d0f6665d27f19b65a73ab52e40805e195a1855bcefcbce5a22f0daa79e39053120e5c6912a40ac273021a8579c5bfd4114d455f4f0d16909bafb751e8bb31de7e0586bb75771c812f37e74be6066228572005a130ddb79053fafa783abd28a52a0cab0be882690b1aeeb390c3cf89ceb30f7f1ba10f3e1558e7ec1c25cefc240b0924d7d8b49bb474ca64b80f61bc9aa72851c86d5db85743d883800529c6a52c061669ae7f7c3085af517aa742fc9e8baed7804413f32ba03b882db595ff81f80d332293ab0418f7cc4397cbd2d74ecb84e2e03afafa7f3ba56ecf512d7f679702981657873418b28b9f577854d49efda80b77eae548b3c2e0ad62d23fb10c3002a31c0ae5430bb6ca32671a1fd5bb6bca209a1ee7ce658e392d8f24e415d46802cb751fe3c83fbccd07310b82dfde800bb0a446e18a6d4b6749f168c051ae6603e5cbc4d1eff8864c95b6bcb15ee2005597a72f36ce914e59791071bdf6eaca06d44be85266220088d5dada2a571e4e449069965786683b7ee83d0f16dac4b80effd3e937757811e904c63b231ead0cac0fc7c3aa92d79840f32e5e8949932b06e4490b2dd7e373300400139b16d7c6dc3f4b11a78766143f5434f2343784cb0070acd7213ba3b05cf586a3e30184837864babca34eccd40e0a55e22b7ab3c80d8f2f63f9ca90c82ac9fc35e623e93499303f74b2461f3a22723d8f480ee890086f568edd489ea587cc13e33d1a97b29357e44ad0da455ca0c212bfa34f1d2900830b48c027a689d02332878215cd856f04d0ae57d221370592d083468c2f2608df58f81ccbe64a3e2fc53ecf498a7e1a2ea7b60bf3ad26761b90d21f509afc0385ec0fd065c5ba36b4297ee690380aef96118e5b6d19ad19d1e98c2e2397aa09b7801015431307e46df482d35d23e66e65ea9a007a726e1a8f7faebe127210040458fe53623b2d2f123a344803cf080493691c0262a922d9c5952717cf5b4d0cb55970011b2ac43660ab76778609a6978f630bd00699326a84790bf70682a40b39a2643c42deea6c606ecc0b215116421d1ffda42333b8af43f109e827d6af0bc2947845605b7117a7875d9b7527f02fa3750d1d93de7553321476f92b11d906fbc23d1a0783f9e4fbaa4a0ec7b92782e626d3276c4978aa07314b831b96e6011ce49cab63b37d65234480a22656dbefc4f681d50f23d6761b5df83c6eecbd01ffc416b72d8df1d37f715fa45e8dd1d3c5078ccb6808b48c8325607f45c9ac04333c950b34f393733932b2b0d2de8a09ff163804f8633a98877d7a2cd37a5d02f38e492b99d874b1c22fda102788673ea04df7ba88b3f236f2b372ac5253f808fb919da916b6f623bb0a91ea8c1176d3aa77e2262f7adac3ec7f9cd57d1aaf023eb1f69f5906266f20fcf1b249056a02ce4871024d96d1ec031cff33a8af7609831bae22976027df620e8436aecdc7eef553020b3aa187837d68a3379acf4d0cf6db1362687c85406d29c405426de2a6add96f8aa60d349548fb095c8df6670fef113929cf04244129618fabe0a5df19760b568e0cea0c8f3e301b4d5c6ef8021bdec47d1396a5efe3e7e9c8020c1c83563e3f32a0897bf8253b37f19aa99c0ab2314cdee5f6ca848ac2f1c8f51d7d05743621ed7b2bfcae3e3fbfa1a8ef7205abc494f456846c7b45684a5481095ca222ec062cb5186a6b6606049c0bc1f50ae9f558c9cd9e20928505da04d88c6a85ec0fcaaa4d12cbdcb63f52d8a6756208897a8b7e37efb1652019e311ada9735a1a56f03bae6e6b6cb67db79a14a2ec06d930f716cd50cf97ab8ff030620d4e5194debdccd02265c089d69c03adbd0d084ab0510f0f61a312ca4d95e1e546390411550163150c0db1ca8a11646e0db90452b4bfba517f5dcedba537a8ef2d496db734a7b037d6be8edf4f732d995ef10a956d650af828845e88dff0c5389e082bff1b0097f25eda356916c7da8e825209ae7313a9e05bd600a39a2a47408890515b19101e8c7f2b22604d84b60a71e60239e9a2b826e678c4435d236698b2faf3388026e5a26669826c729619b612ba0fb4799829f37868ef063f492589847ebc4d3bf731f6e8a57753f4f5ad860a8403145c514f36600e330d40fd1749a78edab38df185c4ffebbe5e871675606a2d02a8abaa60f869406c93f8843428c50d829942e29bda3480a495ee76c3b3a94f03056a6dffd2607d6f62ea7c9a90f01db535927808b7dfe49a331d39ed520eaa011c7ee1bb857c460e807a718588229190fb07ccc8cde083faecc30ead9fdb3f00e81a3ec8657f785b7339ba5183a5fca2c9e6443482f22c329123b6439f85f008577cee1d9a6df2a44253f9db34c6d5a5a83db9bafc2b052e41cabda90f8d2400b7e132b6e00e29c39d6a4f84baba144a32e46c86101a50c02a6f60b3bee9270acf6cee50bfba70025b3932d90482d055fff9faf3e86b38cfb54eec30610508018b90af490ac18ac57f61adb13ff8f44fb215292eefbb38c960441e8440f2e40cbe756596cac3bfd21c3ef0ac57e3026ba0ba42d947ee001d21f7c9194c8cd008083bc7a5977b2ef7e2adc1c0771bd7321ee9917ae7aca64b1f585b65877d01011a357cfcce55d641906ed549756c57d85691e0622f3ef33bec542ae943ed3003213be90fe74ef95f854e446f0a9df795fb0d0c04e70f22ee3f97e9c2d6e0a5019b3d2a602df705750d6536b300f4b6d7c975158bec827f05dc62bfbd19c1fa06419ecc79eee8ae417b36429841bff00713ccac5e970da68f0152718a13aca000faa91bb24426a67dda16571576aede0a63152d09c023a7d397eccb600701810f9840c0cdb2bb7e1b03da0ebcbbc98b860d9c889203cf65e95cb01591ed0b040e0e328b38b34f7c0aca17d471f63ae795bc9a9c3ceb0515ab0415749b68796106f91b608c9c317dd3bc247ca4c0103b3ed78f114889d4633691be3208962c9e0ed0bf8ea72f53fc26611edafe21490580bfbb638838720ad4158ae533e9c53d0f16d27d70bc39fc9f595414745ab7a5fe56f56ffe3293e1c167a2fe9cede28a02f43eb394827f4c2d7391d439a2c53744e5eed49de8e82815adb16656132b95067fd06a47439013e0ee376679cf0ff3feca42f1d8fcb8462f71a445b9b584bb0811ab020294115ac326acae5111ec74a00b7a29a5b78ec4a5eb21dc54aa6bf20cc7b0d275ee5ef8a6c5cf73b11a2dfe63288224432a0e787e35d51011c400ca0782e74d46d50c68323141434d17b70375188d51644a6e8d66fba975799b53cd02a36ffeb1363d31ce8ee987c04f615e49e509f2eb110101c5541e21674ff9b3047010062f476402fbd9aecd00ddd73520ed6672905c5b7456b41bcc042d4e090a4022785b07fc42194a614196f87d618efc247e590a896794113941c8da91120dc7d788367064ce2ce32cbc53d37867d8e996d05cb000a4280a3ba9fca88daf0f940d0fe6c829466b079d540eddc8c9a0888f6115893599bf46f4ae0cab785009994e47c1eed1b7841d2be92d0a99a2af1fd10196cb170e1316679dee81daef073ce0270a94f133125e2647edbca64da53c2cc60eb666e8b8b8b7068140a2030d368012c211461b0b93bc91cd58fd5ff3535a20dd954f5fcf15013cad21a83c051ec4acb2bbb35441efb24d72ce6e1e201208978a8861035368c31fd948ae01057f021a8ff1a194e3c0c1f17e219cdd866740af5b7c5ad0758ca2cd236054a10ac03c8700d201d650e7732bf8d5eb9bafe0253a244073df5d497f93af01cf8706455a6a82e9add15ca2cbcb611a9885c06ee5042ee607af1233c49a89fa37290027bf46c65c911607cea4f2904974ac57139c20f9973295516b964f41971c5c0e582dde683196b5726cbf59b6f396231a7181f1f8667101428adac988881d630308129a864470c9f2d195a7c0572e4815739e49cd5d9e874317f4d00a3f7ec909232c7f340948c3c970c1e549fd77276b7d7fcaad7d2575b55bcac747a801e504975e1c71a55e9fd6d284e40a4ad5b48c8b670ebe068ed5b6574a607cf29df502d4d8488fb6e45a6c4896d392a411f19521d00e7cf3ed90f9e5bf87e0e8dddc0b8d3c4708a7b39a70b3acc21e77201c4e2fd180be42d67a6545548386ae4b2b04509e5b07e8c0cb13f861c83cd65e1e5d50aeedf259ae36fd64280b2e0c34a506cfa874f4e311002b6df4768e38c44111ed37efec4b07e6c73baed58840827b038653431144ce4e790cfc719d679df9a3c5dd56970ff000c00f31483f78d2b00bd85754266bff1e72fb109e277750935362e4610c607049e86a3099eba2a777033a9b6f0b53cd203d20a7a97744c47af3f842cd550fa593d4d6c7948369a5c0090b5b7e719bbfe1775ec1fef006e141e46bf0f23cda7f835d57d3dc4ef948380fcc8e41135142d5927e748f4a15421567544a927146fff898a4efcc7255a46207cc2a229dc7d0d2500223623081237b38b78e92e2e646093cbc45e8b545bdf70a1e092db77c36f0e3460ca47e1a39cd574f124f9f412407e660fa33ae0893db0c75df07945121a6a6aaf1c7747c1ea71a5b0f355e4ad8d09365ac64736e22c80ba4a232193239208abe9a34c4904c0b137875f52ab21afce4bebc0cf1aa5217034b095c1f5c824f4cb1a8bdb1fb9e62ca1579c0970b1b3854f0d5f24b13fe56042fadbf65fe9c6ce4353c561fc92a88a1adac382fed9bd6a0caa09b74cacb3b0e2576fc1ebf5f370d5e9dbd42bba6651ef121a6990394a6e036ee40c4032c7b0689cf15a462c5c399bacc142cae14cb0af00154e4b1ceecb30535e32ebcf069021d3230f71dfbe7061651eb382ae0b8df41f91cb7ec9ea960840358228569e80eb2bcc3b9f46f059f3bc11d2a2ec5ac4ccbefc29843a87c08abf094d2d27f200bd2772a512b12baf6814f779a454166c7e82a07fc66b35e06c9c9262c5e291a0b9c08bf15b524989f0028598f98de4e98fcd9d684404d2cc89633d752f196e90da3f6b58c30288c73c3e9d4ba4d3b95841e2bcb34325aa1f5512937a1a707460be5194bfc055dc91b214fcc8a017835da1ea46e6e1e216e5baa4c794bc132ca0ce4383226b1cfc4fd92de04398ed683280f72d32de415aa290d039c92c1ebee0cf3d6e4d9a5419a3e708de8987ca9e53551976e51ba0dd56b1be60a72a1757b05875d053d0f589cc3d69c83f3efc9f6e638b4c3b72ac705b0af1a5161a8292e08b56108f8ef4d480d2e88548d66e12d65ab981aeed8c673df03f9754490f9df0bda77167baf67de7ce44f3ca56e81fd3fd1ad1df9e08974091af20e781d6490092214622f9f315ae42e682df71b6a376d925be0e21b75975cff9fa90201ff120d271df25fa4e34b9cd06b5fa5feb4405f6bcf4130ffff604e5d388dc59279cd02feb680008b06fd7f271ecff8afd3fb3375d48b3bf8333848899003e0d3b1130930c28280e956f12f3ddcb90260b8b03f1effd39910254fcd2e8977d5dd489e0ff61833261abb91051d207d93d464f0bf5b6affd566545d18dc7a86a7a7c7b103015d0a9879f1c398361131684652b4c733287d67ac263973236ffa5769a4f50b9ff7a157327c69d74f68db14b2463dc4955b8e6dd63c389df05aabb73d69f3061a479b65ab4666750ce1c63b562f06241a8318b9fd9e22ceebf319c71a40ca0fcdbd83ca266cda3e88f06dbee87325c28ff2f0dd3ef90b57a7de412bf4df9c0a2031d7f6061022a818ceaecdd662fd30892dfe55cddfae1577c72beeca8f7f085b70dd0a648e437c31aa2ef574490a211ec9336a95997095d10ccbd62b26230f796744bc028b8eaed1fc4d052bf57296131623401c1f5c1a3e42bdfb83c52e08d3127d1e1a18afb032a7eb1c6ce6b781297d3d60e16a5338e0893260201d2e03ce8fccd0399ef794a4e793c7077f734417f22b83cfa6be701b75a356bc09b30edccb0ab5d01e230a8d2480057250739ed77fd4cad1c381fb2bb7444bc897480e90fde5253508f618752eae4d9bc282cb66d3bbff8896ec76681fe4bfd81f10006f0c9050a9f7adfd90d8b707d9553c1622c1c3aa67d7bbae6724864e270fe10fa653a030ca8b84edee10e101d870680eb7712c1c2eb9f1f3bace7aea83e6250d6231182a3b8ff4e1b2df1c7c53f880bad957899486862c6f58cbd15a5047720d0b45de025e0af6d191d45341a457ebb428f2febdfa44e95bb4394393e92e3000eb4f3d2fa02a9347e6bddf6f765add19c889772af0cea2a10f68f64bbe35e1050bb0ef768462332218ee6cb40ba6f44282bd5269031c3a1c7d8aa8753c32990493689ae2ded6da4af43964bcf33fab54d8eb61333f580269716ef4a0c5f1860cb2ce34365c5eeef7e17bb0afdb8bb1156df702574d54e31701ab9262ba59a407064cc0fe4ec822543dd4d75f65ae481757f50f90449e1e23f9eacede5f2f1d0873b77aeb8ead8684554aff1efdb7f53824196e0a76bc16f54474ff6409e12e06f73bf7b76f9d68f7424b9c85f7781b6384dbe3d54b962cb4b3a6b4cc04f5d40c927111f5dbac7f0fda5937698d5021a14a7b0a6aab3207c8928bcf112ac5ad08bc12a5b2b67e465c75a86aed89b58ad9d0281c2dc5b3adfd3454b88e842ce409c233b3974711aca70eb457f9175fda472d25363e909788e29e2411822e1f810a5f50946d303e42664fd051d6e5ff828e04ab9326b16bcef7f71261d2fce90a078fa65343ca8ff03d1c1712bfa1954240a26000cc3da62f3936187b7fbd4b220efe28b37bec70f174313e4e36b5779c88ea1203a39288454a41e4a7552c651f099c4f66adc12b07a9d795f2ffdd09659f9bff891ecfb2402ee9091e1a5b458e02eae872331b85fe5ae5d81dba1523d693c5b79767226040d9cd2f929b84a7d80cb33e1da5300a8f6713361bd53bbe123ed781b5431cfa4709c38cf1a2adf0c400e59e468aba172f0d2db284f3e4ed1099214a56db10b449d0e4223fb39d7e340fbcdf0490281387ca2e1d1f9eda9cf0a951d8b21d7f284f05f05e35fbcc556c077aa8b2b77d2d4eee3eff530e137d8e6a404ab838e236761dd6097b798b52fd0b393f21b08ade2aaa757c7bffd4e42cbf8a7b432af60e66110324971ea7622e045529d8ffd0fdc035852b40f7e1b02d79aee543a951c594eee41992fce32fa00892eb2b5be466dad771ce5f1d2c53af8cd46a5bb352e68f1ae9bb0970e4341d0f32405f490e07c198a92edd81b573ac26585c3c2c1c9bd94b2e667ceb75f53608470252c9cf7a8c76f04965847cd57a97a29dd8c01767d1deb36c0bb992b14c0cd1a9e80ecf588b6ce5a3f6a6b95d16350de1ee1e233023b0717462ad9ff0120c60d2b7a10a702b0779cdc6605bc78c952f0573b8fc9d09547dd6bcaa3b68640f23a8f4e8ff8cb71659a5517a997ec6d6f6649aefc488c71c31bbf1e316db3000d1872623db7500711ee80327c683afd578b67f737391e1696deea2098b3bb504d935ee4e30ad8608eb0a412ea0c732a547b8eb3d0890fb74fe8c4b96301c5708684890ce116be72ccaffab814ecef2a2dbab46589ad668a51aaf67e8a6300407a0fb3db77d597aea0e0e0160b965cc0e289be6b1b49bab042bdcfcacc6979500a6b175ce213dd3c14890c9e7cff06995e63b27aa212e9af6f21444aae220b5015695ada1b3cd4a5aba53cef777f4f22920e44a3ab94e0d2e7509343a3caa8b072950c785850fdc3fb7b4bbc00d66c977d99374fde26f3dca428d1a0eaa2ed701bf26c479f7eb3f87a4daef7fe6094b2563f100ff81108fa29fd9e9d78afad4066c78a76576e5f7ed6013c765d4ee75e0dddc3850e3de1a0ed3123cef1bce0501220116eb8e55f23a8c793599ec5b6b50276b25f0c86480bfad1167f2c622f90e5dbb26953c8f1c09eb03bb9c7c52ab673c8637aa6e2027c9a58d0628eb70d3032d880af2a230ee9c7a7b7603734f7befebb89ee06eb12c68e1d471757ffa200a432fa5f77deb14bf394fc9e242404fa64ef078d71e618379ed2f976c579b7f01da02f179746e6177085f15ebfe71521da0cccea771055583374d521eccb4870534bcebe42216d2e3e3681a25f18acd7f11792065ab7b50d91c4daf4af53a470bba43b6e6da0459713e765f1629937ad9445993f514f9fd4bb7750cb1be284c0fe78178cd4dea12f20cf75ec5c067199ce5708d5d9faeb522fb62e788efb8d406126e3c5633ca56407c6bfaceead1acc8dd9eeeff41f6d9d3f5bfed63f7964e0fa1d306e97586a65919b6df50a781a8218d9ae0b6da6654ab80c2647fb2b8e209803a7ca6edff241b518832f293c03bb56eb560d8bc628f01bece4dd96d93700458ac8803ec630c1340e177ad040a0d4580788f23fd3357f44b9e90a135dcf502d336ba029ca34e1f00587925c6512541a00249adb00670c5e6e23eeac9021a0ace458fc9abe0dd6a670863a3e5bf9336ee1849084c371c151bb08de47a673a0b28eb237ab7bac01d13ae3f0aca86a676d6fe92f4eae362a9b5cac526362be502c19d75735e1e9ece15ade0132c1fc5c678b8860038efd1655e3818faa150a70d0e71900a1446aca565c9fa8c3f72a245e77a981afccea2d2a6bd2c47caaee10d53f2a471add4ee74ae938ac1a11fd37b6929d99c7406bf16e3e6452c73d0920e43a1aa686bfdafa88e131df0eb0efe5b6d16bba067e886d9b62d7459083e4f0bc7481162d11e9d501a100dae3842247d1462324aefdd0f52021ba038efe83a0aaae1d0379b0fcee291c22383d282a8c9ed9f5930f41d2ffcfe69b2c697fee60061dbb4d1a003d6ead1d5c3adcf5dbc9aa8c42da15c452f0bcb204841e5794b0e7b272c8120dc0a962f25f831352164042341beb30eb4c3eac0bbdb8b5e9d640b7e3f452e05a1b26bc97b3590f8d4ccc08f92323c3e583b67b8472fb5cade990dd6dd280c4613c4c0bf16b4ef254a4b227bf619f085022fd0c5ce1f0038e8860c8d8da722e5dc718fdbe53e5525df0c2da605793c0968c41ba51521efc104ae0ae4f8a6a3a154b09b380f67e5609216be5c9e74f5a062c700ef3ce5233e98f6097e0a5b28f471e0a816714d95abb295f4a46a0d0aaaa8eb9ae5141c5ca9936d0e66ab0d9ca6982e51aa5dac8304a05c23006a241706bc201db460d0eb3f35d60ea7e749e98e345cae901ef37114a017bf318305b5bb9811a85cbeb7f68c2fd5023fbc8893f31bf845eca0561de3c75aa8c1b5be0c091111b2d0ec06211c6e0107d7b0d1a22db36a87d765bbf8a5761dabfb73fa7e62e2bb3412f3f3387e37d40030911d789488006272b7e6a09755c1a131b02e2cd7d0b9a6283d8cc81ff4610b8ea4e7814129b013476c9c1f52903623daf83a75fc8943bcbdc48625ad667d06217e03505756c5467131ec5faf577a147d1afe8cabfed4249c2c53ab337faf0f2b7d9d26c0595a7fab9cef446813009ba79ce993d7bfdf8c0e0738084705fc03d88d9dfcc6bf58b9d7b49a6e7a9e719af597ec1d5406ee68495b3c0ab5a8b40b211d8c9516be9ab108ddedb30aceff8a16c42d36621d17fa281a4f4a53e1e8029fae36446a0952bbc5370815a2f0141164bd358df3be625343f45c87810da803d27b211d258eb5965cb2fc9db284fb76fd61829965c046769ee14fbec4b18b0fbbdbe712a1df64f7ffc0eafbefd51cacf10f894ecd63715381f5bde678346d03b4ae3f7eea764018250b20241ee63d74378218fcc73d36405a78f28d66621b0698d19f25441a765c83a5697eaa0fd6101185ae8fccd39cc00fa7455a3070d606fa27523906befe517a684d56e31014924df787b4db74935b5a450e5c66617008fbf942f9acc622582846f9d7f34200dfdc25e5da9f01ccd5d73c853dbb9eb3046e6e5063aa282c898ef4e15e9b27f929127472e88fcd5a0800bb1eb185d05608a66cfec34f5bbf40b594fefc4e05d9c9530027d9b9282375291934d49c3b5109c83cf1753af3e9ef541bf22168f9d31ca56d63becb57e0b42b7755d5b7246a0aa5b396d57a0ab98777bd1788b580829715866bbda82a9fcb75c3d4720984090cdace39c82b8b6999adee653b6afc91395c60645fd5b0e3b5ed32193e84769d05b0aaadb0f210f9a5a48c3586d12d3cfc701ae3ee5d8ff1ef0bbde2903d6dae01dd1e0c2a02ac22d09cb20d974c8a8c52373cf8a608714be100f816be4cf44d0b8b4c5282eb5361582c5238e0c5e11c5876c7f0ea679369ac1e72bcab635ebe0694ee8c1fef1ab5667a168ce350548041f4d418994342ac763b59665d1284c80013fe85c1dcfeeb8ce15790f1ff6f0729ea55787037ff8c524959064ce1c0f801ccea9ca8920a68506b92d2ce66012f274d67c7f9cfa1b6ccb3cd232f518ef804842fa5a594f31fc33849082483f76380107786a0ffa85fad902630f5feb9f1085e7b8e22fa4e367c5f8f4d446c0625429d493d669f53a6d1604fdb0bfcee1307e0e4a0129790523a6745e8eee442aa7c6fb6289e327e2bf369c68ecbd2ba1e0682850a00b198bd852943edcfd61bf2934bb952be0b828844112ea4015c1d4b00291247c7259a5ce47f6a3eb2afae6640b7a8c455a06b163db0d8f65a51edd30f762c090c42aa81a491280576d610c5bb50705b10dc49ae4cb1e19bbc01a5da096b6dcd4fb10a25a1a8ef538fac7868fdfe4f124d90ac930ded7d46b33a282909fa09219b4e5340304c3ce39199ccb48be4e4c031b34a54fbac5baa17a832d208d4426725a27f423d4d4efb83583607ebdb6954aedfbd7cb35d315334a7a2f204b911f9d2572ada3f15ae48f5e93aa79de2b876bbdb2d46afd9886445469b3e0b0b33ca2668965db0f6b4a0827f9930fa68a087dddbc431d9d1ddee9f28b2ab066c518a9efc512e845715bbfe6704b06985da7de40ea1369acbb03734909d9f071bd588f342c59bdb6fb54386c1df56d0b1f1ff805785a1076994005b9e52d309c1957a55d7d602da71379b8a9d8ff8c33009815f5cda5009bebd6dd7f25eea09fd1b7f8719b9c85f0f0a061a655365c7f727de7ded50794f854fc3e898e3660966b23e4eaf789e0a37d0332e7f53f5c4fc9d510b9cbaff0b937dbc079d2bf50d0d90a39325baf1c58c9809e55f7335e7f8ef317fe0a5e17bf66fa3e673b1190d923275f87badcce0d00463bae3f750534ad1b7783529e98561653702e125f805f0e2ff742ab9960cc078ed2411f762ab9f9e1ff8d108f73444c6cf66ab44a30e054187bd6d5bd311ad7e6ea08c4e1d9ec501d2a1155a1b3290f65803fbd1fc03c7d0afaf691c3884513a5ba1727e7519722fb996b9bb88db80aadb3149b20308fe11dd52642836ffb641d0eb8044de6e762540c5641f9b4a1f3e2fffab7ecb00e3350da71a1a21b0835aa92e64d9f9e7237f6d63e902749d2c69d2b0d825ad01002c5e1dfd2cef31d1f0f960a44fccdd3b7ebe3b4d6b98ac8566f978118e39017a105aa5e2a3f43b94f11e0fa113dcb44b2c225cc8fda036b0b4d1f90e31c10026543b26aa0d759e8a13466081422a291e7e94d6b10e1544f999bc5827abbb0cfb9594f365f915054d8d027c3c3ae4247a77fda3d885d95e83afaf6d31ed970f9eac2fe0557a316f80e8a6b2ab9f3d3c661500c400921f550c49063b695a0600fb8b60ccc34968b3d0b6e70aa5fbd195952f6212dcb4bf533faa9db8720152063aa34a82e578a98f23b39e57d09bf5fea78a24b7d604f3926c4513f24cbed10f34397b1aaee0f917148e82017f74c474242535d03a2d72f80200f5e0388f81076d7e453984e4bc934350e1392ea774db38186265ebf3f4207dbad610a7c1c302ad0a2cc58103382b76acb472ee7c19b0122b0ab70d9dd224ab937eeb5d12320d6c7bf60052f6c3a9cc2472d74a8cbc195419f07263c8c1311ecd306b2e959804edbd1895650ff0322158abda1f32e61f0afc866f9730cade552732f43b2dff0e113e7ba6e03410c68e3b31fc1d6e7505aaa425baefb0c584698a2b08ecd54f05ea03eb699e531d49a19b06152b1c59d287cbc4d342dcb5faccbec4b906b3ef0ff82ca8ea7820e69ab1b402666b8ac9add17af43f5b81694b7ffecee39bc9b8058eaa8017f24c313f2f3b27f7ef9f1bd64179beb401ac21ba6b5166ed1375300acfe7a40ec5a876cec340409c9b3d2b5324d43a888307cef5f92fa88ae6f1a30d59f5b4ff69ae086cbd1c2004fdc8c37141d2a4380625e1252d62b752dd50510c5af90d6ceb964be6895f1b35cc4a5a39855d7b18e9b5e62e9f49b3af5088ed00a2f06dc3d65123368c7af1e24714d69cc18cd035933359cf485a8ffaefaeb80a5d760dc112be61c09e9931d36c50f2b8286ca2efbede9e50c9b98272d61ba005778ae37da1f632432369e90adc3d97d1ecabfc77613bdbc96afb0ceb2e23fa0f9cf05dd97fdec84a52d0028f5c1940cce7cd03319752f687823fb39a7a814a04d79ba32ddb8e86c5dc557c885164de1db3d85bae83f349ab6f89492c803a3a0e7ed26e2b1b3acbdf66dadc72849e644b3d76280d73048884f2720d43340eb20e2089aefa97154b7bb076a9b3f9d2344cf1f586a2021bd9ed91d5e199ab8d320b0c85e4278a632d767e0724e13cc830196896799123db745e533fe7b33178cb0f6081776a6280e4707745b7501ecf28103eaa9f4d7a31c67dae89a887cd52df0da0a48619bc6fa0223557f8c4f7b0e28373502269f1abc4928a58edc967e0480f81d17718f5552d8263e25b6c26515772393648bd97f1ee45d17779e5fa53290d32ea65754d3eabff72569d1f117d646972083e7429574fd9423c0e53519e4404c81a8e234cbdc5d81d617efb9286450b349ac27f5f5df786189d9e727d00a808a206d7badd92f5c8cc74be534da57dfdc58b0cfc5aa6b5c623db4b4f6bfe9c011ea693f9ac725159767193bfb9bb386061a085b38762a99c8f8706161b0de3052b8c7fa65fcdadb228c5bd76151d42dfa575f1b0b55b3b7a3913dfe27927c70e284461b24a85d12c4abc11795a02d36f8fa4eff728bd097e7a39aae62de03f0bd6449bcb766f89edbb4cb13fb05d5f1e703e26599437556bb0cf4531a63bfd05b84ba2d4e35489a313d5484548d5b5cbf41817fe2bd8b79e1256078fdb11500e4f6362a0121a150d05978f53844de6b64ceaf01c9f1227097de4e020962e230765cf499d0d0d3a941cfc9419dba468e8dc0e11fab5cf4fdc87e800380c3b6b0d8729d09140012de67fa92a39b84b8944c6d2022eb0d1e180c9f3c1c01049de09e813299be2d51b70e306068d3523299fa1146180bf4fcd41b45b00a9d7bb4c064fdc09ab550551dde5da62c026d5968e0f4d471bc52a36b6b464e435d580520c0876ec6eb3bb65335dbeed7f1aaa9fa9580b83ca54050aa5ed84f5cd56cb5105b8086a22f9e4149820d5f8c1060e0fb7bc4a2b0d51c12e5f7ecdffca87faa40c4fb195b9fecacfa6e8523ed794c98714387b294dfd4dd3fe1185f6e69c7d3309b22d534083f67679b13fbb22a1e4534d085470b61aea32151d9537feef775c015f4107240f94bd4b6e88a91860f5ae467024ba02ae50bad4468a0eca1780a0048caa622a8a2b4387a45b2a82823a383dc23d8bf6bffa50294706e899f8e9da0364e84e5e71b74da4f77f221d8cb5e24590ce7662c08e20d19d7a801646d2c0045511c8abbd9beeae42405f9b5a03ea3bfb79261aa908ec6cf70d06476539750adc40ab94bdfdf1c203ea7cc87813500109c6549ad1fd20f2c5b1fb71c112d40b0a88098bb75c287f7286180a3a179299d13533938a65c006ca2a77129299db0d04182d05baa7d01b00bc3da3b3ceb240e565f378e6f17b4327e8ed58edd1c60c9e66a0f99fb916efc71e185faad80ec6553763e881419dae985ddc78062e820bee09d7252306262393fcec46aef0318a2ef45f45df275bb0d346fd4d153d64020c5e2a6d6c0bb817bf0fbc8bd91f88674e2cf45e9eebb957759894920c16bd0d007b4eae5f7f73988cad448228816692ad31db849423ab8eb808aa3ebd145507bae009a341e3f818c6c1202e111321dc44b713ee314d0c32f6161d9dec098c09a7a6d8a97d9f66472d3a56b054acb8355398e59d68bb8073dd850aef410f4204659328515b8c446da83a82abc6d590318090848ad1ef219ea6c6f664c3e0a6073ab9dc4e3917ecc46189e81aa4eb26121e7aa800b0f69e27ac3fd3f09ec0e004a23d944ab0194624e5a11f02f1f8b9fb8d1b259889813e9e5486cc8ded6c740a8e379a5fbc1fb9e45ed9c4d68a16d38f0c26eb9a584d6c0c09ce3fef8b047b01c88f986a6df0cf3d5676d6282fc3ee4ace1515a71fd6b4d3e8685c031f55070e5371ba8d0e2e1abd4a80f665c7fd3cb775072c3da940df439d40f985040f960f5987b15e6d135c58d22e0acd6b211bb1d86d21265321b73a94de57a4e64dd709d5a237b21e0a40a3b008d3289191a7af49dc954657775320777136649277fc0ac845284f2f73e3804342810017fafe222b97b363adcd364261eec54557611709cf4091fcd4fd2bbdd7a4f50e9b06cd844578580b6e059ddb1d274dd1747e96018f32a23a227e58abbd9889f81457a8b13a81e4d2caaa6f2e77b759de92e2330b406dc863b30663678538db610fb239dc375487bbb72ea7bef02ef316b764ca07e1675aa16e14d2ed578c698158bfacc6eb0de4e98904a8fecbd8d101734af50d6549af8eb61d6c2f04b250c1474de153df28cd616b571b41b05fa6492d17a402f2733e228b8b835a5e9ab7c303c0cc8089c828ee742d13e23eb30f29eb174006462fca5c73af52a687a98e3a67545cc03a4d10b4ec9d73319298941265cc4c0310e8902a53747fd397438856502600164c0c04da20980d197e337bd4137c17039f66ea2ca50e97bfc7db21acb6a0a54a0b02cea9d4f93c90f06d78ddf81ac70e78aa56c9785d877420d2fe8abf9ef917488425ebec5fd7db586b0da1865c320eca94551ad187c758fe09657a970d2342957f20b71bcc732a7d5e1835ecd38d0196659ada53e8c57db44b64c1d769fc02ac2c9994ed7b69964293473787026e068cbcba907c052c5143a17ad56de9ee6b076f8853b60ee5ebf9ef7db6ce34660994d981e2db1a40d56b68dce61d319389bb4b21619c2e742432ae01ec9e67a30fc752430b537035a9231e536d43ac18014cc0eea4b618a3aafd0eb82357ac10062ee8507c8c68ec15949807414ca624dcb4e3e7ed5eb7f0973907fb1790d7d60ee4226221c5667059225cb6cd56664a08e5d07d68b9bb4eaa370968693dd6390455a1a16c3f823f4ed8a9440b1e8e2c0ef180106223fd7205aaf43b7aaeb9fa0c186c54aca2c8aa94f34259637ad7b22773cf60c76c06eb20bd4b7bb585e63400c1732fdc061b3d6a40923dce7e4c238c63cd681a5d519ac8c729395bbdc9c407bcde84e91e5507ab2d93f7e056b56023282e6b920f267d826446a336f1e28107228f18f3b1061f173f9f0a12d5a3d8af7d4548f2cda68b271294da4d7ab64b0b4ad41f4c1937aaf65827e3ff2a472b87979849806bd313622443d45d9d0ed1097807b57e0a92f6399892018bed7a9985ab2f7ab6dffd5ad669698fb0d253400c2fd07f2e197d4651be0155b2c9fa234bef27f18b6c1dab1d7cb46919eb164f030f6bbde8036cbbe22323cac10741f05e881c492fedd90dcb37a644c91c483a03606a2512f48fb3976b288f62c762c42fe735927aa10e01ea75cd93ebfcd5dd0fdfe8bdd93398d81b3e3e1cc619f9a47dfd22f3449982660da5f2e82e35821200377d66e10c5f62e357d9e94a5f9f46d2f119d11278f93380e0c390dd03079a0b02e1d0d3424dacd628fa2ae5abba15c70b84c3716e251efc857962c320d491053441884f013c5d14b406f0d8ab89c9bd027e8fc23e58818ef91d20b2d971e808b5b9bc7986d672715e8e2485d88c474ad0fa1505df2f641b441144bf4f7ba10aa12ef7045545c16a684b413b114c058ef487023e70291f47e14fb41432b51b057b4f84047a1c7e5f24a43e0a813928a96db358d37dc6fd18a9cf448c7ed21a07c79f5a37d3362a26f520310c964a411da48a5fba66a509d925dd77a6ecf09b09fa5f05e141898905999ac62e3f64d86cddd5d3dfc752680163e25590a55eb4000864ccb5efc6b484d7fe36ee8993fe24a4eabbd637222275faccb23a627f2e0950e36f4fe3154cbf801464353be3d674960b9be25432457c25eef9c30518540302931ad080d918af4d1e10dacf2e3f945fd9077ab19888086ff82b3c6a344a0ab3687bffb2fbb4f267315e89e2eef4fd88af7ceaea034fdf8e3c50b546d6ab0099cb9ea17178024b56bc83aaab513be82d50a13b4bf11fcafb1bd3d510c47a01f76260d4e700d92e460c2c5ba58ca364c9a28d1202098dbf0294a709408d2003a28e65137fac188ac72c0f447d345d4eaff79075f08b5d08b4a8126c06ed0f0aa6d4810bbbbc50a34fce0ac1280c92cf519aff3b135692fd7d57cf66d5d565077e03bccd5f81bd1d63ec21b460fe9068de10a36b42dfbd67ed1b7d12dcc96803bdc091af78740001368ccccf52e8e183a0febe9d7ad32bd66fd83fdbb2da1a0836daa551c55ae37740ad7b0c31e1940585fe41a77b101e2d59086851edd4d80c24b7672a126bef875bed5ddd4c05592f27ac6218368790480c9520130ca2180fcfd2591b94e858c92f56fc3f278e45ce52cf86121a26282b0962af55b6e7340524109782cc5b2ac21eed3f55de1d0c24c8e2d73769f0553a4d83eccd9d6e7a06af6817b3fd81d948812ea9df6805cd8fbf6e008a4f20dc7a22c0fdbecac921084754f3acd20584f8b04e654769a885f091e1e445f6b54d8b4742f4c8593de802d3eb84c2c42db5aa270285372d3c28c555f00deb230da034cfad86bceccd5f074f2a0ce851fdd23ae94c14ece9d456eea9ac4cf6688608bf8ba078eac21e800913dd708e79087fb50cb6170a00a839d761397e8f1dddc6b89aa1cfaa35ccbb0e6cc03115c72d21a13a3d543b2c825237f85113dc275ded5a3ecd3480a412510f219c6e3f9c985c69e4b101cd5449dc1084d1224d40ff67cda5f9d357f7dd770e4681aab6f420231fd81e8937df2d4f35ff9dda3669c87a1448553635f266dc0b2dd5971788a605b7ab0aef5c95af3f1cc7c5e66926e3c643b1412cb006ccf8077a7e5c01cf239405a06fe4fcaaec10663f7d4734de9c77edc0a03fd97812d702ffdce8797069543b8e466628f63a6494868592d8b737b13159458603b19b6a0e34d8d38533d300de7937e84f08c6f0ed8b06fd785d8335385805b396852e2a090938a9a8ed096f1aa05da1ceee18e6cb8b413e19628f6aa29cba068dba751402fb786108e718c592703705871ba7682e1111703735f16be8aed641e173aed009a11c9e657524f133fbdeefb4233f4d75f7316233336cd6f7d8897b207935120cf7c7c7019deeeb2035f53e157b35d750fdf4637ffb3312dd49c65fceb8c0b404da6b0ae6ae7ae35cc0ce5987caa6f69abab5156d647a7915f8091372f945d90abbb783c50374577502e250aa8c6eeaeac38475565ffdb611ec185231f8d919087ae2242ed4f6374ec1e7d781f43d2269e8411c709e12004ecb2376586ba40606a8544e3214d25e2b59bd96be417b7999d8c8278770bff503f7f5adf8580e7d093eef96bf304ba1e3bb664c248d0d273096f7716a27b2ba19fca02b7a2c7b620bdfcdf629354a31ac381265fb6af45f35ffff6c4b8db80d6c4cc23b974f64c20efb84adcc9b04abc8e9b2d27821a43c087314dec822787f9ec91c2f19749d29096ae59188f4325e2765a58b5419c8a296c91edb9321fffa8173e07af079706902c141721b33422fdd74e84f9a6fd93c3ebcc220d8879cf18a4f3d0c406bd20e002ed295bbbeb276421dea2651b509f4421d5613e24915f270a2acc5639d226b0223bbb036bf587f49e693212f82d26d1022bfa507065eb439d1cb993e5e53c7062fb8c2ee4660faf1e3d124e79e8974aa7a2b2e8dc01bdf315128b771b3ada904f235629fe54cfd11c1c360f62396ebe5a1d65c4ed8ded029cffca1410ad62a034edfe1afe0d6ef212094b9284c6696f6a571570b410ade4bc32dbf40e59db00499ecba3d21d8384ce26649e17d84e5c2af41a6a48eeafa4a62fdb79b77e72609e28cdc35cb002d335e96600b753b2b07274b2aea2010370cc7b1f814d062ef00c43acef1aaa895a914bc225e357a47b8a75cae9c0b70e3b50cc9c9cfc5079804c998d1250f737912ec2846af9494ed7e31c938be1715bf9b2c3a850b99e806052023047e1709a10815e7cf4064478cade7deb28d84adb12e2e52b4d2f3b0fa07212f2d60bd6f7b2de3530a79d9ddfd5a9cf531ae2fbd02b0413b737b1c6d6300216484e681a4d6beeaee3dab0f517487bfae613f2d0e1c28a2bb60fe6111c20e4ef081ddd8127575c9b2fbd858e67d76221621ee8606d39a33b353775883dc01fee807293f38a1d3f0898157686d92503b983f9ff3b288520c9fbd5ac96a6402a8b4c48337d7456ad3cc3403c2bf543ee3cd86c6a49dc05eb56445debce40e0fdc6d01ec2326a24855d9f3b6d191095e5404ccb8be7127af51f8529d1f3a0009c9f2c0492b383c8229fc61716b00014e486a43d024f292e5e697ac33392a320e74f21a4961f09e3f133e317f4fa18a71b871525361da0a17b91cc574f9cb63039054c3c858c8afc53f187d76259c2c51efcd95e2a6244f18f23440677ce0ee0abb38d7b53a4a0c0431e0bd2186181f7ada82eab0b120d63d3b21317bd9d961023e8ff1e89529be2792c57a99ad35b79c0755424638d4d389e5156a4a6cb38909cfa9080c8ef3c1e339b303aa2ecec380f8d19533f237ac8f53f3447103530305722acfba4328e214168d03d0e533ada067227af58453b463e7d961a633a74d0e96e7a5b49445fbe263f802a860b48c7bd3638901b150c4b135b6acea41b34a0adb9003e0cae7f33ffc7a2301814b8a139aaaef41fb2310e091e6e06626782d084d763f314d4847002a5dd546b1f3d48ecd5b3d97c6f2d996ad48c88e2cab2c0eb0072cd272ff9fc5fd60855e81bd9dd45691fba56b06aeb3489ce29d136de20c1bfeba60975e6bba237d08bf6b2c5d485f4733e95bfa36716776ed83eaea4203077e9feaa9146a9e8ee43cbc69f59c57ca02ab8eaf12c8b5c21ea41bf2a1640b893cf999ccea9f6634db5e00175b5f9873faea64bacf2b7e632e75474e7f2c055e932ef96249212d74104804db698db4f0f9c7e962970b9b0e3fb16ecc7d6707b047ac3482026a4476af25f787657609c5b1808d98109b92e235951cc31da00709c5f203ebe4e311fad3498593e610b1827ea98cf7d3956153c95ee4c4643f0bda76d2e4a0e98f0a4e4e78f905bdc8b4d4ad2c9d11c3bb5ece9c7714daa9cb0cc1e97018b24129629bada3a04a305feed217797b03d8dde126d374dfc4a29607cea120b916c05ad17dc67887c65a23e4869423b7ee01c362285bb44f98e2720272d3dd3a994fc71d2256e39a847023374d0955f3a6e0067a4898536084fbb00262aa89b6444f0fe246693a322bbc1af5ddfe1dfd664d392b059833b51e22b10f88c4222f7ba08120d24e345f2675dba7e49520e61a1d70e6204661284cf0f705bedeadb8ada2c819ac772c3683bd030a2febafd039107d84d4498a6b7da9680418ed153f9ad4d24506e793d19c38c18c6a7b959d8b439c72c9431b05786f9c0d519bd67c4240736980aa24d2a3b3d3b59965fa260cc1273966f32dd1f14d84069f8e5138e17528cb15a737b06003a7365af8bf851dda77aff822ccbf8253e5098b2f3c606ab30ef02efb250117cfd46be2600779f56704f7eeeeac4aa408990a9c491455d3ad8abb27cac6457cc427df655326bfbc62694e0d34c7ef7dd7cf00b4a5d94405b239e034fd674ae4a99d4fb003ba52a224148376d4ae66cc90b70668f46f0d87c04002b0fad3506bbcddc0ff7186b3509167dc8ecacadf31a3f1022efdddd0d200b208d2257680f4867ab350b87c8a8eba9cd926da40ce425df50411a0b53f59c505e3114dfcabb7b16aa04da0468b7a6d5efb4a3c20d04ed536027411bac7dcb177a2843a390081de7916c0c8a8f6a54abd46a991f2d5faa22e080540966e6737cb76175de0aeab5c2dbf77fb96852b6abc1058b7f3b64dd5ec0a3bf7831fd644ce2ff89681ff4aa7f2c88994a804f18b2e1497b55b8f95edc70236b265c6c8e58f00661baa41cf6b0b64b5183a5f0dface75a6956521d2ae5b050ac579a9afbfd95cd447664f3f72ababe829a005ca27501222f293e2d4ef150ea5caf07d5a8abc1cb641a1f45e61c47419fb171ac216b43c3304c7253c1f7e0aede783c028b35e80b917a1d0d3e7a7ab5a92d4f54c6458aae9c133fb25072309c881424dd86c205e9ef5f276cb6e07268f1d86782b4764a6a06f9b1477222f0b7ca04ea7730de07687035d8e3d4e9475c627714763bb1b95bb1b0d4ffc98970bfd54a0059ae2850596354d29fb3dec730873dbb75a346e3ce0e8cf165cba0700c8b76440b29540db41e2459141f59b4dac05e0618f78dc212e90ba19b7d2400f71b062e86d37fb30e7bbb026525e0e8419f33020c65ecd78a10fb51ce0456f022487710421a138931f26b95ae855b6bd9fbc8c3350481dbc02eff0cc02324f0b31826a0edf0907998c9e3c41e1e10a25946162bbc718be1b4e233a88c090b90abfb47d57514af691fe80f3ba2cdf92ae39f613afcd4951b3427e4f0b977fcc0444f11a91713ad0890dfa38b5a8720c1103ebf90be277fa8f3aa73668d94ee1075c1ed6d05a791a68de866d504270d792952eba19dfd69b88833dc72be099790ab68d3432dd7b52d91d593e7963c0c358e66f6770d55f78371d431166b1a5720e3de501cffab3c149ef3f6326bb571efc032e6bed83854545ace74f27c572ba0d3e6649865ace39af51492b21047668dce34c132c89fb88fd22dfdba261d25e0bfe0b0629f1df89659baebdeadb1de862619f3bbadb56869bb23d66f29a51180ba1dc9d70af59dbb3f860b1069d22552db009539227a055dcbcc1416baa0d430e8f25a3cae3d91808b1889a71f63b2835e12f7e52ac61788b61a7a3da0ee2de0a870588b5d708ddc3bc1a14bf0eb0903d6a26289d2cba1fc0021f15880a31b703f52eab58e1f8771011b5742933cfdd094fd7b1f9b650b73490829cc51b45220105ffe973025e1a1849de9000284a0d796d921013941b78d22335cf763d893c056a817910458055631cc25e3bf1f1066d1b8675f0879798b5fdb3fa6e7f1a9e0e3090372e1bda370468ca84c4e20ea3e96f3082a297d501d9d7ce11f6bfc9dd02ce696dcfc92e7ee7bd1f70e6ce449e952fcc255521293de8fbc7575970ca05040f495e10bdb683664821740e102fdaf0e23b67162657264aa89615bed24a4b010a755126b8439a8df9430dbfb16261813e5a5c6b7932caa2f84d31c767c0b907767ead07aab57038ecce23926d9337668eb6bf2a317655900f5af01aba8aaf0fdbddfc636b2c22944ca8fc9c717e57e4aa09504bb7a7f5b9266ee31f67e18a0acc06c095dc4d5830801617f5eb944cfaaa71db58c1074842a731deb39d9407082300499c6159bbb98040b51d7fe0e47ee7e51757939f88d6b4b1ec9eff0b05085cf05cc198db781e75348af1481d8212dec26a7e9edb81e1dcc1818d477e400ddd95e1092fad22fdbaced3a6b126391d6beeb592b53e524dc2ce2bceab5fc601de1d98c3250edb3d587aedfc791fe344284ab9c42b3709d6499cd9df4fa9640b2fed769b3d5beae2f4b5c73a4970597fa96151550c5aa1c933f4fbce75d878011d93818e8ce31c13ee54889a1e894d6efcb77f704f36f6584c92ac47b9b15600909e3e03c14e818673d518e0818a4c7d0ee0ee897217d0faba04041fcb819d09d3de08b66bb08607b759f77e90917c036e0d476a19f9392bbf9c5c5121e37406b3985b9cd6779d8962f43b9c090db2e72d267a701c51f0399e80e3024ee9210ccfc5c981d7881a0c195a13032dea28c2d758c1ef29f3450f2fd1904d8c68bf0631407bc484a51265411bbdad3052d547952c694abbf20e153fd7b81014974505c60aea9d0b85d082387da2330f4cf9b98e629bf1b4414c027f984530f303d503d9f1245be2e25f392e0acfd01fff1e526c0c00130da5f62b2ed08a1b920a900a76c5d0d0676ad03d29e8d7b84b74afe82088f86ca99460b7a47fcdc8a322350b594793235c5a20e5b9220812c55ff98f18f7a61909aa71dd98c75791bd77230ea03bcabd9935ece120d0c9b233c211772abba9430eedf2acc1713139bdde3606dab45cd6910d811fb893fced02ec805c8156e0613f142a4e226939ca5b7806075828fab33b8cb255bb9dd3962e5a8c02254fd9f818a877e8e5d2f67a5868f20cc09dea886af9b7d1a6ed09618f3799e09020179cf8e12449b2072701387cd001a9c8bf0449bebf96692b7a365b87d6cc3df10e79085b52e3ed090cb1d5d2810a0a95ddfdaaa2dab0ffd22ddadd02876fbfa6169f3c5cf7b0720163b1f3320800741254a377375d7842bbb9ab2a868fdbb30abea627d7073445d5973d56374a00ea34c3aa68de6b391171cbd2ced5aa9b87e91d088ebbf388ceb195da30f824042489f7da1ffc443061968bd06394e27d410752e1d04c4004b428a019f7ae6a06e91b1c1859a00c2f6cf49e77061c6c2eb0e5d2b61ad21e8bdb96c8bd176d970e4bd491c76ac17ec1214b5fcb3cd0ab9486206897bd4454dd94ea16959eb0520304476635245a8c884097cfeafe19bec7c2b1e0e08ea242bc652d4fd492e6aa0a8bbe0bac1f32591dfbf23cc16e4d6fc9be09769efbee2c0f1bf20cb94430df0190e9f33388c7f3b080c591ae6f839c3a2602908a9753e3294b14ce82033a5305e36f082a67cc9c5a4a659132b23e05fc87eb1d4b0f412af702fd195f01ecab0800392650775264e1b4bffa415060df7af25c87854cafd8248d2b7fd43e1a350f13ace13fb7e4530fd9884aafefc7d53e3ae1eed388a00d6511c047e9b1ddc909f023877ed5e45d4d090bd62a0c04482d10b88d96b60c5479cd920bb00d52610209d697cf08a313b4d48b3b9873588db2a9918a7ae97d40561fcfd6f2c0b29f0c8c38de977c943b77d00f3c94fd154bd32b66c77685a01f3c604b1d02f973520a1ea5ff0b712a2bb13131c3f8e24bf2162716ab6075429e91c767cf07da16750fcb6b310ac00b4afcbffabd034d98e59bb12a773302c5f4aa6b1fabb684c5fc0fe80fa8a136b3fe1345d81b4a7981ba3429bbeee04fc3e02069634f7743bcda0a018befeaf04f07a58c51bb4b744fc39798f6ecac905cac0980b81da995fff60a67b3cf08d961bb00163186fe4e4e50ece0adcb887f0e5a3020b30b7b1a962603ce22503bbcac3758bb81e5adc272fe79159c00db344461e73d4e3c1e3b394904ce950c6e4f433b3681ac7506297520b1eea349ab7e3dc25049f490fb9024b40156e2c2d16d0b875476140c17a52b73bfb34cfc4cf42f3fcf969705774e35730b65be396c255e376fb7deac1a7ad2dc8770525d0e257e02eb95e25b1b99f30a0403aa68827318275d2dd127adc6451a85bffccab54efe87b613663ae10441df0e279b8fefea4bf6ffb1d1b022f9f26d5ec0127e95734b7ccb3acfa5e550fc2c0ea686599cfa6432ac604676d65c3e60d6f0180e4146ac92da112ce2a4642b7a09862cb98d19336792b6d67e51f090430ae45bc64c1cd091169a117eb32df6850f \ No newline at end of file diff --git a/keccak.go b/keccak.go new file mode 100644 index 0000000..d9d617a --- /dev/null +++ b/keccak.go @@ -0,0 +1,20 @@ +package moneroutil + +import ( + "github.com/ebfe/keccak" +) + +func Keccak256(data ...[]byte) (result []byte) { + h := keccak.New256() + for _, b := range data { + h.Write(b) + } + result = h.Sum(nil) + return +} + +func Checksum(data ...[]byte) (result []byte) { + keccak256 := Keccak256(data...) + result = keccak256[:4] + return +} diff --git a/ringsignature.go b/ringsignature.go new file mode 100644 index 0000000..9752d27 --- /dev/null +++ b/ringsignature.go @@ -0,0 +1,53 @@ +package moneroutil + +type Key [32]byte + +type ctKey struct { + destination Key + mask Key +} + +type ecdhTuple struct { + mask Key + amount Key + senderPk Key +} + +type RingSignatureBase struct { + ringSigType uint8 + message Key + mixRing [][]ctKey + pseudoOuts []Key + ecdhInfo []ecdhTuple + outPk []ctKey + fee uint64 +} + +type Key64 [64]Key + +type boroSig struct { + s0 Key64 + s1 Key64 + ee Key +} + +type mgSig struct { + ss [][]Key + cc Key + ii []Key +} + +type rangeSig struct { + asig boroSig + ci Key64 +} + +type RctSigPrunable struct { + rangeSigs []rangeSig + MGs []mgSig +} + +type RingSignature struct { + RingSignatureBase + RctSigPrunable +} diff --git a/transaction.go b/transaction.go new file mode 100644 index 0000000..6945a20 --- /dev/null +++ b/transaction.go @@ -0,0 +1,73 @@ +package moneroutil + +type Hash [32]byte +type PubKey [32]byte +type Signature struct { + c []byte + r []byte +} + +type txOutToScript struct { + pubKeys []PubKey + script []byte +} + +type txOutToScriptHash struct { + hash Hash +} + +type txOutToKey struct { + pubkey PubKey +} + +type TxOutTargeter interface { + TxOutTarget() []byte +} + +type txInGen struct { + height uint64 +} + +type txInToScript struct { + prev []byte + prevout uint64 + sigSet []byte +} + +type txInToScriptHash struct { + prev Hash + prevout uint64 + txOutToScript []byte + sigSet []byte +} + +type txInToKey struct { + amount uint64 + keyOffsets []uint64 + keyImage PubKey +} + +type TxInMaker interface { + TxIn() []byte +} + +type TxOut struct { + amount uint64 + targets TxOutTargeter +} + +type TransactionPrefix struct { + version uint32 + unlockTime uint64 + vin []TxInMaker + vout TxOut + extra []byte +} + +type Transaction struct { + TransactionPrefix + signatures []Signature + ringSignatures []RingSignature + hash []byte + blobSize uint32 +} diff --git a/varint.go b/varint.go new file mode 100644 index 0000000..a77bfe8 --- /dev/null +++ b/varint.go @@ -0,0 +1,19 @@ +package moneroutil + +func ReadVarInt(varInt []byte) (result int64) { + for i, b := range varInt { + result += (int64(b) & 0x7f) << uint(i*7) + if int64(b)&0x80 == 0 { + break + } + } + return +} + +func WriteVarInt(num int64) (result []byte) { + for ; num >= 0x80; num >>= 7 { + result = append(result, byte((num&0x7f)|0x80)) + } + result = append(result, byte(num)) + return +} diff --git a/varint_test.go b/varint_test.go new file mode 100644 index 0000000..cc465ba --- /dev/null +++ b/varint_test.go @@ -0,0 +1,49 @@ +package moneroutil + +import ( + "bytes" + "testing" +) + +func TestVarInt(t *testing.T) { + tests := []struct { + name string + varInt []byte + want int64 + }{ + { + name: "1 byte", + varInt: []byte{0x01}, + want: 1, + }, + { + name: "3 bytes", + varInt: []byte{0x8f, 0xd6, 0x17}, + want: 387855, + }, + { + name: "4 bytes", + varInt: []byte{0x80, 0x92, 0xf4, 0x01}, + want: 4000000, + }, + { + name: "7 bytes", + varInt: []byte{0x80, 0xc0, 0xca, 0xf3, 0x84, 0xa3, 0x02}, + want: 10000000000000, + }, + } + var got int64 + var gotVarInt []byte + for _, test := range tests { + gotVarInt = WriteVarInt(test.want) + if bytes.Compare(gotVarInt, test.varInt) != 0 { + t.Errorf("%s: varint want %x, got %x", test.name, test.varInt, gotVarInt) + continue + } + got = ReadVarInt(test.varInt) + if test.want != got { + t.Errorf("%s: want %d, got %d", test.name, test.want, got) + continue + } + } +}