608060405234801562000010575f80fd5b503360405180602001604052805f8152506200003281620000be60201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000a6575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200009d9190620001d9565b60405180910390fd5b620000b781620000d360201b60201c565b506200053c565b8060029081620000cf919062000458565b5050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620001c18262000196565b9050919050565b620001d381620001b5565b82525050565b5f602082019050620001ee5f830184620001c8565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200027057607f821691505b6020821081036200028657620002856200022b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002ea7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002ad565b620002f68683620002ad565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620003406200033a62000334846200030e565b62000317565b6200030e565b9050919050565b5f819050919050565b6200035b8362000320565b620003736200036a8262000347565b848454620002b9565b825550505050565b5f90565b620003896200037b565b6200039681848462000350565b505050565b5b81811015620003bd57620003b15f826200037f565b6001810190506200039c565b5050565b601f8211156200040c57620003d6816200028c565b620003e1846200029e565b81016020851015620003f1578190505b6200040962000400856200029e565b8301826200039b565b50505b505050565b5f82821c905092915050565b5f6200042e5f198460080262000411565b1980831691505092915050565b5f6200044883836200041d565b9150826002028217905092915050565b6200046382620001f4565b67ffffffffffffffff8111156200047f576200047e620001fe565b5b6200048b825462000258565b62000498828285620003c1565b5f60209050601f831160018114620004ce575f8415620004b9578287015190505b620004c585826200043b565b86555062000534565b601f198416620004de866200028c565b5f5b828110156200050757848901518255600182019150602085019450602081019050620004e0565b8683101562000527578489015162000523601f8916826200041d565b8355505b6001600288020188555050505b505050505050565b6125aa806200054a5f395ff3fe608060405234801561000f575f80fd5b50600436106100b1575f3560e01c806376052e041161006f57806376052e041461019b5780638da5cb5b146101b7578063a22cb465146101d5578063e985e9c5146101f1578063f242432a14610221578063f2fde38b1461023d576100b1565b8062fdd58e146100b557806301ffc9a7146100e55780630e89341c146101155780632eb2c2d6146101455780634e1273f414610161578063715018a614610191575b5f80fd5b6100cf60048036038101906100ca9190611688565b610259565b6040516100dc91906116d5565b60405180910390f35b6100ff60048036038101906100fa9190611743565b6102ae565b60405161010c9190611788565b60405180910390f35b61012f600480360381019061012a91906117a1565b61038f565b60405161013c9190611856565b60405180910390f35b61015f600480360381019061015a9190611a66565b610430565b005b61017b60048036038101906101769190611bf1565b6104d7565b6040516101889190611d1e565b60405180910390f35b6101996105de565b005b6101b560048036038101906101b09190611ddc565b6105f1565b005b6101bf610651565b6040516101cc9190611e45565b60405180910390f35b6101ef60048036038101906101ea9190611e88565b610679565b005b61020b60048036038101906102069190611ec6565b61068f565b6040516102189190611788565b60405180910390f35b61023b60048036038101906102369190611f04565b61071d565b005b61025760048036038101906102529190611f97565b6107c4565b005b5f805f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061037857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610388575061038782610848565b5b9050919050565b606060055f8381526020019081526020015f2080546103ad90611fef565b80601f01602080910402602001604051908101604052809291908181526020018280546103d990611fef565b80156104245780601f106103fb57610100808354040283529160200191610424565b820191905f5260205f20905b81548152906001019060200180831161040757829003601f168201915b50505050509050919050565b5f6104396108b1565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561047e575061047c868261068f565b155b156104c25780866040517fe237d9220000000000000000000000000000000000000000000000000000000081526004016104b992919061201f565b60405180910390fd5b6104cf86868686866108b8565b505050505050565b6060815183511461052357815183516040517f5b05999100000000000000000000000000000000000000000000000000000000815260040161051a929190612046565b60405180910390fd5b5f835167ffffffffffffffff81111561053f5761053e61187a565b5b60405190808252806020026020018201604052801561056d5781602001602082028036833780820191505090505b5090505f5b84518110156105d3576105a961059182876109ac90919063ffffffff16565b6105a483876109bf90919063ffffffff16565b610259565b8282815181106105bc576105bb61206d565b5b602002602001018181525050806001019050610572565b508091505092915050565b6105e66109d2565b6105ef5f610a59565b565b6105f96109d2565b60045f81548092919061060b906120c7565b919050555061062c336004548460405180602001604052805f815250610b1c565b8060055f60045481526020019081526020015f20908161064c91906122ab565b505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61068b6106846108b1565b8383610bb1565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f6107266108b1565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561076b5750610769868261068f565b155b156107af5780866040517fe237d9220000000000000000000000000000000000000000000000000000000081526004016107a692919061201f565b60405180910390fd5b6107bc8686868686610d1a565b505050505050565b6107cc6109d2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361083c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108339190611e45565b60405180910390fd5b61084581610a59565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610928575f6040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161091f9190611e45565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610998575f6040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161098f9190611e45565b60405180910390fd5b6109a58585858585610e20565b5050505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b6109da6108b1565b73ffffffffffffffffffffffffffffffffffffffff166109f8610651565b73ffffffffffffffffffffffffffffffffffffffff1614610a5757610a1b6108b1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610a4e9190611e45565b60405180910390fd5b565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b8c575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610b839190611e45565b60405180910390fd5b5f80610b988585610ecc565b91509150610ba95f87848487610e20565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c21575f6040517fced3e100000000000000000000000000000000000000000000000000000000008152600401610c189190611e45565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d0d9190611788565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d8a575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610d819190611e45565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610dfa575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401610df19190611e45565b60405180910390fd5b5f80610e068585610ecc565b91509150610e178787848487610e20565b50505050505050565b610e2c85858585610efc565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610ec5575f610e686108b1565b90506001845103610eb4575f610e875f866109bf90919063ffffffff16565b90505f610e9d5f866109bf90919063ffffffff16565b9050610ead83898985858961128c565b5050610ec3565b610ec281878787878761143b565b5b505b5050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b8051825114610f4657815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610f3d929190612046565b60405180910390fd5b5f610f4f6108b1565b90505f5b835181101561114b575f610f7082866109bf90919063ffffffff16565b90505f610f8683866109bf90919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146110a9575f805f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561105557888183856040517f03dee4c500000000000000000000000000000000000000000000000000000000815260040161104c949392919061237a565b60405180910390fd5b8181035f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461113e57805f808481526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461113691906123bd565b925050819055505b5050806001019050610f53565b506001835103611206575f6111695f856109bf90919063ffffffff16565b90505f61117f5f856109bf90919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516111f7929190612046565b60405180910390a45050611285565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161127c9291906123f0565b60405180910390a45b5050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115611433578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016112ec959493929190612477565b6020604051808303815f875af192505050801561132757506040513d601f19601f8201168201806040525081019061132491906124e3565b60015b6113a8573d805f8114611355576040519150601f19603f3d011682016040523d82523d5f602084013e61135a565b606091505b505f8151036113a057846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016113979190611e45565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461143157846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016114289190611e45565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b11156115e2578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161149b95949392919061250e565b6020604051808303815f875af19250505080156114d657506040513d601f19601f820116820180604052508101906114d391906124e3565b60015b611557573d805f8114611504576040519150601f19603f3d011682016040523d82523d5f602084013e611509565b606091505b505f81510361154f57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016115469190611e45565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146115e057846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016115d79190611e45565b60405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611624826115fb565b9050919050565b6116348161161a565b811461163e575f80fd5b50565b5f8135905061164f8161162b565b92915050565b5f819050919050565b61166781611655565b8114611671575f80fd5b50565b5f813590506116828161165e565b92915050565b5f806040838503121561169e5761169d6115f3565b5b5f6116ab85828601611641565b92505060206116bc85828601611674565b9150509250929050565b6116cf81611655565b82525050565b5f6020820190506116e85f8301846116c6565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611722816116ee565b811461172c575f80fd5b50565b5f8135905061173d81611719565b92915050565b5f60208284031215611758576117576115f3565b5b5f6117658482850161172f565b91505092915050565b5f8115159050919050565b6117828161176e565b82525050565b5f60208201905061179b5f830184611779565b92915050565b5f602082840312156117b6576117b56115f3565b5b5f6117c384828501611674565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156118035780820151818401526020810190506117e8565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611828826117cc565b61183281856117d6565b93506118428185602086016117e6565b61184b8161180e565b840191505092915050565b5f6020820190508181035f83015261186e818461181e565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6118b08261180e565b810181811067ffffffffffffffff821117156118cf576118ce61187a565b5b80604052505050565b5f6118e16115ea565b90506118ed82826118a7565b919050565b5f67ffffffffffffffff82111561190c5761190b61187a565b5b602082029050602081019050919050565b5f80fd5b5f61193361192e846118f2565b6118d8565b905080838252602082019050602084028301858111156119565761195561191d565b5b835b8181101561197f578061196b8882611674565b845260208401935050602081019050611958565b5050509392505050565b5f82601f83011261199d5761199c611876565b5b81356119ad848260208601611921565b91505092915050565b5f80fd5b5f67ffffffffffffffff8211156119d4576119d361187a565b5b6119dd8261180e565b9050602081019050919050565b828183375f83830152505050565b5f611a0a611a05846119ba565b6118d8565b905082815260208101848484011115611a2657611a256119b6565b5b611a318482856119ea565b509392505050565b5f82601f830112611a4d57611a4c611876565b5b8135611a5d8482602086016119f8565b91505092915050565b5f805f805f60a08688031215611a7f57611a7e6115f3565b5b5f611a8c88828901611641565b9550506020611a9d88828901611641565b945050604086013567ffffffffffffffff811115611abe57611abd6115f7565b5b611aca88828901611989565b935050606086013567ffffffffffffffff811115611aeb57611aea6115f7565b5b611af788828901611989565b925050608086013567ffffffffffffffff811115611b1857611b176115f7565b5b611b2488828901611a39565b9150509295509295909350565b5f67ffffffffffffffff821115611b4b57611b4a61187a565b5b602082029050602081019050919050565b5f611b6e611b6984611b31565b6118d8565b90508083825260208201905060208402830185811115611b9157611b9061191d565b5b835b81811015611bba5780611ba68882611641565b845260208401935050602081019050611b93565b5050509392505050565b5f82601f830112611bd857611bd7611876565b5b8135611be8848260208601611b5c565b91505092915050565b5f8060408385031215611c0757611c066115f3565b5b5f83013567ffffffffffffffff811115611c2457611c236115f7565b5b611c3085828601611bc4565b925050602083013567ffffffffffffffff811115611c5157611c506115f7565b5b611c5d85828601611989565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611c9981611655565b82525050565b5f611caa8383611c90565b60208301905092915050565b5f602082019050919050565b5f611ccc82611c67565b611cd68185611c71565b9350611ce183611c81565b805f5b83811015611d11578151611cf88882611c9f565b9750611d0383611cb6565b925050600181019050611ce4565b5085935050505092915050565b5f6020820190508181035f830152611d368184611cc2565b905092915050565b5f67ffffffffffffffff821115611d5857611d5761187a565b5b611d618261180e565b9050602081019050919050565b5f611d80611d7b84611d3e565b6118d8565b905082815260208101848484011115611d9c57611d9b6119b6565b5b611da78482856119ea565b509392505050565b5f82601f830112611dc357611dc2611876565b5b8135611dd3848260208601611d6e565b91505092915050565b5f8060408385031215611df257611df16115f3565b5b5f611dff85828601611674565b925050602083013567ffffffffffffffff811115611e2057611e1f6115f7565b5b611e2c85828601611daf565b9150509250929050565b611e3f8161161a565b82525050565b5f602082019050611e585f830184611e36565b92915050565b611e678161176e565b8114611e71575f80fd5b50565b5f81359050611e8281611e5e565b92915050565b5f8060408385031215611e9e57611e9d6115f3565b5b5f611eab85828601611641565b9250506020611ebc85828601611e74565b9150509250929050565b5f8060408385031215611edc57611edb6115f3565b5b5f611ee985828601611641565b9250506020611efa85828601611641565b9150509250929050565b5f805f805f60a08688031215611f1d57611f1c6115f3565b5b5f611f2a88828901611641565b9550506020611f3b88828901611641565b9450506040611f4c88828901611674565b9350506060611f5d88828901611674565b925050608086013567ffffffffffffffff811115611f7e57611f7d6115f7565b5b611f8a88828901611a39565b9150509295509295909350565b5f60208284031215611fac57611fab6115f3565b5b5f611fb984828501611641565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061200657607f821691505b60208210810361201957612018611fc2565b5b50919050565b5f6040820190506120325f830185611e36565b61203f6020830184611e36565b9392505050565b5f6040820190506120595f8301856116c6565b61206660208301846116c6565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6120d182611655565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036121035761210261209a565b5b600182019050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261216a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261212f565b612174868361212f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6121af6121aa6121a584611655565b61218c565b611655565b9050919050565b5f819050919050565b6121c883612195565b6121dc6121d4826121b6565b84845461213b565b825550505050565b5f90565b6121f06121e4565b6121fb8184846121bf565b505050565b5b8181101561221e576122135f826121e8565b600181019050612201565b5050565b601f821115612263576122348161210e565b61223d84612120565b8101602085101561224c578190505b61226061225885612120565b830182612200565b50505b505050565b5f82821c905092915050565b5f6122835f1984600802612268565b1980831691505092915050565b5f61229b8383612274565b9150826002028217905092915050565b6122b4826117cc565b67ffffffffffffffff8111156122cd576122cc61187a565b5b6122d78254611fef565b6122e2828285612222565b5f60209050601f831160018114612313575f8415612301578287015190505b61230b8582612290565b865550612372565b601f1984166123218661210e565b5f5b8281101561234857848901518255600182019150602085019450602081019050612323565b868310156123655784890151612361601f891682612274565b8355505b6001600288020188555050505b505050505050565b5f60808201905061238d5f830187611e36565b61239a60208301866116c6565b6123a760408301856116c6565b6123b460608301846116c6565b95945050505050565b5f6123c782611655565b91506123d283611655565b92508282019050808211156123ea576123e961209a565b5b92915050565b5f6040820190508181035f8301526124088185611cc2565b9050818103602083015261241c8184611cc2565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f61244982612425565b612453818561242f565b93506124638185602086016117e6565b61246c8161180e565b840191505092915050565b5f60a08201905061248a5f830188611e36565b6124976020830187611e36565b6124a460408301866116c6565b6124b160608301856116c6565b81810360808301526124c3818461243f565b90509695505050505050565b5f815190506124dd81611719565b92915050565b5f602082840312156124f8576124f76115f3565b5b5f612505848285016124cf565b91505092915050565b5f60a0820190506125215f830188611e36565b61252e6020830187611e36565b81810360408301526125408186611cc2565b905081810360608301526125548185611cc2565b90508181036080830152612568818461243f565b9050969550505050505056fea26469706673582212202113eade2621413245858e3146395806650e2f1bd8f445e10f475f2688f4cd3064736f6c63430008160033