0x60806040526000600b556402540be400600c556707a1fe1602770000600d556064600e55612710600f556101906010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055503480156200007257600080fd5b506040518060400160405280601481526020017f447261676f6e73206f66205a6f62726f746572610000000000000000000000008152506040518060400160405280600381526020017f444f5a0000000000000000000000000000000000000000000000000000000000815250620000f033620001a160201b60201c565b8160029080519060200190620001089291906200044b565b508060039080519060200190620001219291906200044b565b505050620001597f679b4db551486bdc8b8c3d86cea88bd774cea7c203e4aa4e3b39b7bb5f64bc146000801b6200026760201b60201c565b6200019b6200018e7f679b4db551486bdc8b8c3d86cea88bd774cea7c203e4aa4e3b39b7bb5f64bc14620002ca60201b60201c565b33620002e960201b60201c565b6200055f565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006200027a83620002ca60201b60201c565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b6000806000838152602001908152602001600020600101549050919050565b620002fb8282620002ff60201b60201c565b5050565b620003118282620003e160201b60201c565b620003dd57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b82805462000459906200052a565b90600052602060002090601f0160209004810192826200047d5760008555620004c9565b82601f106200049857805160ff1916838001178555620004c9565b82800160010185558215620004c9579182015b82811115620004c8578251825591602001919060010190620004ab565b5b509050620004d89190620004dc565b5090565b5b80821115620004f7576000816000905550600101620004dd565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200054357607f821691505b602082108103620005595762000558620004fb565b5b50919050565b61535a806200056f6000396000f3fe6080604052600436106102465760003560e01c80636506b92911610139578063a22cb465116100b6578063ce4422c51161007a578063ce4422c514610838578063d547741f14610861578063e985e9c51461088a578063f103b433146108c7578063f2fde38b146108f0578063f81227d41461091957610246565b8063a22cb46514610755578063ac31db341461077e578063b88d4fde146107a7578063bde708f4146107d0578063c87b56dd146107fb57610246565b80638da5cb5b116100fd5780638da5cb5b1461066e57806391d148541461069957806395d89b41146106d65780639a58332d14610701578063a217fddf1461072a57610246565b80636506b929146105aa5780636817c76c146105d357806370a08231146105fe578063715018a61461063b57806372be5bd71461065257610246565b806331b5b907116101c75780633ccfd60b1161018b5780633ccfd60b146104d757806342842e0e146104ee578063564566a81461051757806360d938dc146105425780636352211e1461056d57610246565b806331b5b9071461042957806334918dfd1461045257806336568abe146104695780633b0b04c7146104925780633cb1d995146104bb57610246565b80630a8ad85a1161020e5780630a8ad85a1461034457806318160ddd1461036f57806323b872dd1461039a578063248a9ca3146103c35780632f2ff15d1461040057610246565b806301ffc9a71461024b57806306fdde0314610288578063081812fc146102b357806308fc299b146102f0578063095ea7b31461031b575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906133c3565b610930565b60405161027f919061340b565b60405180910390f35b34801561029457600080fd5b5061029d610a12565b6040516102aa91906134bf565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613517565b610aa4565b6040516102e79190613585565b60405180910390f35b3480156102fc57600080fd5b50610305610b29565b60405161031291906135af565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906135f6565b610b33565b005b34801561035057600080fd5b50610359610c3c565b60405161036691906135af565b60405180910390f35b34801561037b57600080fd5b50610384610c46565b60405161039191906135af565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc9190613636565b610c50565b005b3480156103cf57600080fd5b506103ea60048036038101906103e591906136bf565b610ca9565b6040516103f791906136fb565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190613716565b610cc8565b005b34801561043557600080fd5b50610450600480360381019061044b919061388b565b610cea565b005b34801561045e57600080fd5b50610467610d79565b005b34801561047557600080fd5b50610490600480360381019061048b9190613716565b610e1a565b005b34801561049e57600080fd5b506104b960048036038101906104b49190613517565b610e96565b005b6104d560048036038101906104d09190613914565b610f15565b005b3480156104e357600080fd5b506104ec6111eb565b005b3480156104fa57600080fd5b5061051560048036038101906105109190613636565b6112b6565b005b34801561052357600080fd5b5061052c6112d6565b604051610539919061340b565b60405180910390f35b34801561054e57600080fd5b506105576112ed565b604051610564919061340b565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f9190613517565b611304565b6040516105a19190613585565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613a09565b6113b5565b005b3480156105df57600080fd5b506105e8611502565b6040516105f591906135af565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190613a65565b61150c565b60405161063291906135af565b60405180910390f35b34801561064757600080fd5b506106506115c3565b005b61066c60048036038101906106679190613914565b611644565b005b34801561067a57600080fd5b506106836117d5565b6040516106909190613585565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb9190613716565b6117ff565b6040516106cd919061340b565b60405180910390f35b3480156106e257600080fd5b506106eb611869565b6040516106f891906134bf565b60405180910390f35b34801561070d57600080fd5b5061072860048036038101906107239190613517565b6118fb565b005b34801561073657600080fd5b5061073f6119be565b60405161074c91906136fb565b60405180910390f35b34801561076157600080fd5b5061077c60048036038101906107779190613abe565b6119c5565b005b34801561078a57600080fd5b506107a560048036038101906107a09190613afe565b611b30565b005b3480156107b357600080fd5b506107ce60048036038101906107c99190613be8565b611c58565b005b3480156107dc57600080fd5b506107e5611cb3565b6040516107f291906135af565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d9190613517565b611cb8565b60405161082f91906134bf565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a9190613517565b611d60565b005b34801561086d57600080fd5b5061088860048036038101906108839190613716565b611dee565b005b34801561089657600080fd5b506108b160048036038101906108ac9190613c6b565b611e10565b6040516108be919061340b565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e99190613517565b611ea4565b005b3480156108fc57600080fd5b5061091760048036038101906109129190613a65565b611f32565b005b34801561092557600080fd5b5061092e612022565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109fb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0b5750610a0a826120c3565b5b9050919050565b606060028054610a2190613cda565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4d90613cda565b8015610a9a5780601f10610a6f57610100808354040283529160200191610a9a565b820191906000526020600020905b815481529060010190602001808311610a7d57829003601f168201915b5050505050905090565b6000610aaf8261212d565b610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590613d7d565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000601054905090565b6000610b3e82611304565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba590613e0f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610bee5750610bed8133611e10565b5b610c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2490613ea1565b60405180910390fd5b610c378383612199565b505050565b6000600e54905090565b6000600b54905090565b610c5a3382612252565b610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090613f33565b60405180910390fd5b610ca4838383612330565b505050565b6000806000838152602001908152602001600020600101549050919050565b610cd182610ca9565b610cdb813361258b565b610ce58383612628565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16610d096117d5565b73ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5690613f9f565b60405180910390fd5b8060049080519060200190610d759291906132b4565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16610d986117d5565b73ffffffffffffffffffffffffffffffffffffffff1614610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de590613f9f565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90614031565b60405180910390fd5b610e928282612701565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16610eb56117d5565b73ffffffffffffffffffffffffffffffffffffffff1614610f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0290613f9f565b60405180910390fd5b80600e8190555050565b7f679b4db551486bdc8b8c3d86cea88bd774cea7c203e4aa4e3b39b7bb5f64bc14610f40813361258b565b601160019054906101000a900460ff16610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f86906140c3565b60405180910390fd5b601160009054906101000a900460ff1615610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd69061412f565b60405180910390fd5b6010546110068367ffffffffffffffff16610ff8610c46565b6127db90919063ffffffff16565b1115611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e906141c1565b60405180910390fd5b346110678367ffffffffffffffff16600d5461283990919063ffffffff16565b11156110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f9061422d565b60405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111448367ffffffffffffffff16600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127db90919063ffffffff16565b1115611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90614299565b60405180910390fd5b611199338367ffffffffffffffff166128b3565b8167ffffffffffffffff16600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b3373ffffffffffffffffffffffffffffffffffffffff1661120a6117d5565b73ffffffffffffffffffffffffffffffffffffffff1614611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125790613f9f565b60405180910390fd5b600047905061126d6117d5565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112b2573d6000803e3d6000fd5b5050565b6112d183838360405180602001604052806000815250611c58565b505050565b6000601160009054906101000a900460ff16905090565b6000601160019054906101000a900460ff16905090565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a39061432b565b60405180910390fd5b80915050919050565b3373ffffffffffffffffffffffffffffffffffffffff166113d46117d5565b73ffffffffffffffffffffffffffffffffffffffff161461142a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142190613f9f565b60405180910390fd5b60005b82518163ffffffff1610156114fd576114867f679b4db551486bdc8b8c3d86cea88bd774cea7c203e4aa4e3b39b7bb5f64bc14848363ffffffff16815181106114795761147861434b565b5b6020026020010151610cc8565b8160096000858463ffffffff16815181106114a4576114a361434b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806114f5906143b9565b91505061142d565b505050565b6000600d54905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361157c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157390614457565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff166115e26117d5565b73ffffffffffffffffffffffffffffffffffffffff1614611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90613f9f565b60405180910390fd5b61164260006129bf565b565b601160009054906101000a900460ff16611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a906144c3565b60405180910390fd5b6116aa600e54600f54612a8590919063ffffffff16565b6116ce8267ffffffffffffffff166116c0610c46565b6127db90919063ffffffff16565b111561170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690614555565b60405180910390fd5b3461172f8267ffffffffffffffff16600d5461283990919063ffffffff16565b1115611770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117679061422d565b60405180910390fd5b60288167ffffffffffffffff1611156117be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b5906145e7565b60405180910390fd5b6117d2338267ffffffffffffffff166128b3565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606003805461187890613cda565b80601f01602080910402602001604051908101604052809291908181526020018280546118a490613cda565b80156118f15780601f106118c6576101008083540402835291602001916118f1565b820191906000526020600020905b8154815290600101906020018083116118d457829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff1661191a6117d5565b73ffffffffffffffffffffffffffffffffffffffff1614611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790613f9f565b60405180910390fd5b60008110156119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90614653565b60405180910390fd5b80600d8190555050565b6000801b81565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a906146bf565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b24919061340b565b60405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16611b4f6117d5565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613f9f565b60405180910390fd5b600f54611bc38251611bb5610c46565b6127db90919063ffffffff16565b1115611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb90614751565b60405180910390fd5b60005b81518163ffffffff161015611c5457611c41828263ffffffff1681518110611c3257611c3161434b565b5b602002602001015160016128b3565b8080611c4c906143b9565b915050611c07565b5050565b611c623383612252565b611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890613f33565b60405180910390fd5b611cad84848484612ade565b50505050565b602881565b6060611cc38261212d565b611d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf9906147e3565b60405180910390fd5b600060048054611d1190613cda565b905011611d2d5760405180602001604052806000815250611d59565b6004611d3883612b3a565b604051602001611d499291906148d3565b6040516020818303038152906040525b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff16611d7f6117d5565b73ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc90613f9f565b60405180910390fd5b600b54811015611de457600080fd5b8060108190555050565b611df782610ca9565b611e01813361258b565b611e0b8383612701565b505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16611ec36117d5565b73ffffffffffffffffffffffffffffffffffffffff1614611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1090613f9f565b60405180910390fd5b600b54811015611f2857600080fd5b80600f8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16611f516117d5565b73ffffffffffffffffffffffffffffffffffffffff1614611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e90613f9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d90614969565b60405180910390fd5b61201f816129bf565b50565b3373ffffffffffffffffffffffffffffffffffffffff166120416117d5565b73ffffffffffffffffffffffffffffffffffffffff1614612097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208e90613f9f565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661220c83611304565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061225d8261212d565b61229c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612293906149fb565b60405180910390fd5b60006122a783611304565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061231657508373ffffffffffffffffffffffffffffffffffffffff166122fe84610aa4565b73ffffffffffffffffffffffffffffffffffffffff16145b8061232757506123268185611e10565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661235082611304565b73ffffffffffffffffffffffffffffffffffffffff16146123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614a8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240c90614b1f565b60405180910390fd5b612420838383612c9a565b61242b600082612199565b6001600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461247b9190614b3f565b925050819055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124d29190614b73565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61259582826117ff565b612624576125ba8173ffffffffffffffffffffffffffffffffffffffff166014612c9f565b6125c88360001c6020612c9f565b6040516020016125d9929190614c61565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b91906134bf565b60405180910390fd5b5050565b61263282826117ff565b6126fd57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61270b82826117ff565b156127d757600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008082846127ea9190614b73565b90508381101561282f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282690614ce7565b60405180910390fd5b8091505092915050565b600080830361284b57600090506128ad565b600082846128599190614d07565b90508284826128689190614d90565b146128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f90614e33565b60405180910390fd5b809150505b92915050565b60008167ffffffffffffffff8111156128cf576128ce613760565b5b6040519080825280602002602001820160405280156128fd5781602001602082028036833780820191505090505b50905060005b828163ffffffff16101561297b57600061291b610c46565b90506129278582612edb565b80838363ffffffff16815181106129415761294061434b565b5b6020026020010181815250506001600b60008282546129609190614b73565b92505081905550508080612973906143b9565b915050612903565b507fc30aec18d07dacc3a8cc4a805923fa38d25098fe16c3069a6af835e1f74971f983428360006040516129b29493929190614f11565b60405180910390a1505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082821115612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614fa9565b60405180910390fd5b8183612ad69190614b3f565b905092915050565b612ae9848484612330565b612af584848484612ef9565b612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b9061503b565b60405180910390fd5b50505050565b606060008203612b81576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c95565b600082905060005b60008214612bb3578080612b9c9061505b565b915050600a82612bac9190614d90565b9150612b89565b60008167ffffffffffffffff811115612bcf57612bce613760565b5b6040519080825280601f01601f191660200182016040528015612c015781602001600182028036833780820191505090505b5090505b60008514612c8e57600182612c1a9190614b3f565b9150600a85612c2991906150a3565b6030612c359190614b73565b60f81b818381518110612c4b57612c4a61434b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c879190614d90565b9450612c05565b8093505050505b919050565b505050565b606060006002836002612cb29190614d07565b612cbc9190614b73565b67ffffffffffffffff811115612cd557612cd4613760565b5b6040519080825280601f01601f191660200182016040528015612d075781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612d3f57612d3e61434b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612da357612da261434b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612de39190614d07565b612ded9190614b73565b90505b6001811115612e8d577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612e2f57612e2e61434b565b5b1a60f81b828281518110612e4657612e4561434b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612e86906150d4565b9050612df0565b5060008414612ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec890615149565b60405180910390fd5b8091505092915050565b612ef5828260405180602001604052806000815250613079565b5050565b6000612f1a8473ffffffffffffffffffffffffffffffffffffffff166130d4565b1561306c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b8152600401612f5e94939291906151be565b6020604051808303816000875af1925050508015612f9a57506040513d601f19601f82011682018060405250810190612f97919061521f565b60015b61301c573d8060008114612fca576040519150601f19603f3d011682016040523d82523d6000602084013e612fcf565b606091505b506000815103613014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300b9061503b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613071565b600190505b949350505050565b61308383836130e7565b6130906000848484612ef9565b6130cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c69061503b565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314d90615298565b60405180910390fd5b61315f8161212d565b1561319f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319690615304565b60405180910390fd5b6131ab60008383612c9a565b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131fb9190614b73565b92505081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546132c090613cda565b90600052602060002090601f0160209004810192826132e25760008555613329565b82601f106132fb57805160ff1916838001178555613329565b82800160010185558215613329579182015b8281111561332857825182559160200191906001019061330d565b5b509050613336919061333a565b5090565b5b8082111561335357600081600090555060010161333b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133a08161336b565b81146133ab57600080fd5b50565b6000813590506133bd81613397565b92915050565b6000602082840312156133d9576133d8613361565b5b60006133e7848285016133ae565b91505092915050565b60008115159050919050565b613405816133f0565b82525050565b600060208201905061342060008301846133fc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613460578082015181840152602081019050613445565b8381111561346f576000848401525b50505050565b6000601f19601f8301169050919050565b600061349182613426565b61349b8185613431565b93506134ab818560208601613442565b6134b481613475565b840191505092915050565b600060208201905081810360008301526134d98184613486565b905092915050565b6000819050919050565b6134f4816134e1565b81146134ff57600080fd5b50565b600081359050613511816134eb565b92915050565b60006020828403121561352d5761352c613361565b5b600061353b84828501613502565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061356f82613544565b9050919050565b61357f81613564565b82525050565b600060208201905061359a6000830184613576565b92915050565b6135a9816134e1565b82525050565b60006020820190506135c460008301846135a0565b92915050565b6135d381613564565b81146135de57600080fd5b50565b6000813590506135f0816135ca565b92915050565b6000806040838503121561360d5761360c613361565b5b600061361b858286016135e1565b925050602061362c85828601613502565b9150509250929050565b60008060006060848603121561364f5761364e613361565b5b600061365d868287016135e1565b935050602061366e868287016135e1565b925050604061367f86828701613502565b9150509250925092565b6000819050919050565b61369c81613689565b81146136a757600080fd5b50565b6000813590506136b981613693565b92915050565b6000602082840312156136d5576136d4613361565b5b60006136e3848285016136aa565b91505092915050565b6136f581613689565b82525050565b600060208201905061371060008301846136ec565b92915050565b6000806040838503121561372d5761372c613361565b5b600061373b858286016136aa565b925050602061374c858286016135e1565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61379882613475565b810181811067ffffffffffffffff821117156137b7576137b6613760565b5b80604052505050565b60006137ca613357565b90506137d6828261378f565b919050565b600067ffffffffffffffff8211156137f6576137f5613760565b5b6137ff82613475565b9050602081019050919050565b82818337600083830152505050565b600061382e613829846137db565b6137c0565b90508281526020810184848401111561384a5761384961375b565b5b61385584828561380c565b509392505050565b600082601f83011261387257613871613756565b5b813561388284826020860161381b565b91505092915050565b6000602082840312156138a1576138a0613361565b5b600082013567ffffffffffffffff8111156138bf576138be613366565b5b6138cb8482850161385d565b91505092915050565b600067ffffffffffffffff82169050919050565b6138f1816138d4565b81146138fc57600080fd5b50565b60008135905061390e816138e8565b92915050565b60006020828403121561392a57613929613361565b5b6000613938848285016138ff565b91505092915050565b600067ffffffffffffffff82111561395c5761395b613760565b5b602082029050602081019050919050565b600080fd5b600061398561398084613941565b6137c0565b905080838252602082019050602084028301858111156139a8576139a761396d565b5b835b818110156139d157806139bd88826135e1565b8452602084019350506020810190506139aa565b5050509392505050565b600082601f8301126139f0576139ef613756565b5b8135613a00848260208601613972565b91505092915050565b60008060408385031215613a2057613a1f613361565b5b600083013567ffffffffffffffff811115613a3e57613a3d613366565b5b613a4a858286016139db565b9250506020613a5b85828601613502565b9150509250929050565b600060208284031215613a7b57613a7a613361565b5b6000613a89848285016135e1565b91505092915050565b613a9b816133f0565b8114613aa657600080fd5b50565b600081359050613ab881613a92565b92915050565b60008060408385031215613ad557613ad4613361565b5b6000613ae3858286016135e1565b9250506020613af485828601613aa9565b9150509250929050565b600060208284031215613b1457613b13613361565b5b600082013567ffffffffffffffff811115613b3257613b31613366565b5b613b3e848285016139db565b91505092915050565b600067ffffffffffffffff821115613b6257613b61613760565b5b613b6b82613475565b9050602081019050919050565b6000613b8b613b8684613b47565b6137c0565b905082815260208101848484011115613ba757613ba661375b565b5b613bb284828561380c565b509392505050565b600082601f830112613bcf57613bce613756565b5b8135613bdf848260208601613b78565b91505092915050565b60008060008060808587031215613c0257613c01613361565b5b6000613c10878288016135e1565b9450506020613c21878288016135e1565b9350506040613c3287828801613502565b925050606085013567ffffffffffffffff811115613c5357613c52613366565b5b613c5f87828801613bba565b91505092959194509250565b60008060408385031215613c8257613c81613361565b5b6000613c90858286016135e1565b9250506020613ca1858286016135e1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613cf257607f821691505b602082108103613d0557613d04613cab565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613d67602c83613431565b9150613d7282613d0b565b604082019050919050565b60006020820190508181036000830152613d9681613d5a565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613df9602183613431565b9150613e0482613d9d565b604082019050919050565b60006020820190508181036000830152613e2881613dec565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613e8b603883613431565b9150613e9682613e2f565b604082019050919050565b60006020820190508181036000830152613eba81613e7e565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613f1d603183613431565b9150613f2882613ec1565b604082019050919050565b60006020820190508181036000830152613f4c81613f10565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f89602083613431565b9150613f9482613f53565b602082019050919050565b60006020820190508181036000830152613fb881613f7c565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061401b602f83613431565b915061402682613fbf565b604082019050919050565b6000602082019050818103600083015261404a8161400e565b9050919050565b7f507265616c65206d7573742062652061637469766520746f206d696e74204e6660008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006140ad602183613431565b91506140b882614051565b604082019050919050565b600060208201905081810360008301526140dc816140a0565b9050919050565b7f50726573616c65206173206265656e20636c6f73656400000000000000000000600082015250565b6000614119601683613431565b9150614124826140e3565b602082019050919050565b600060208201905081810360008301526141488161410c565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f20647572696e672070726573616c650000000000000000000000000000000000602082015250565b60006141ab602f83613431565b91506141b68261414f565b604082019050919050565b600060208201905081810360008301526141da8161419e565b9050919050565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b6000614217601f83613431565b9150614222826141e1565b602082019050919050565b600060208201905081810360008301526142468161420a565b9050919050565b7f596f752063616e2774206d696e7420616e796d6f726500000000000000000000600082015250565b6000614283601683613431565b915061428e8261424d565b602082019050919050565b600060208201905081810360008301526142b281614276565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614315602983613431565b9150614320826142b9565b604082019050919050565b6000602082019050818103600083015261434481614308565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff82169050919050565b60006143c4826143a9565b915063ffffffff82036143da576143d961437a565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614441602a83613431565b915061444c826143e5565b604082019050919050565b6000602082019050818103600083015261447081614434565b9050919050565b7f53616c65206d7573742062652061637469766520746f206d696e74204e667400600082015250565b60006144ad601f83613431565b91506144b882614477565b602082019050919050565b600060208201905081810360008301526144dc816144a0565b9050919050565b7f507572636861736520776f756c6420657863656564206d617820737570706c7960008201527f206f66204e667473000000000000000000000000000000000000000000000000602082015250565b600061453f602883613431565b915061454a826144e3565b604082019050919050565b6000602082019050818103600083015261456e81614532565b9050919050565b7f596f752063616e2774206d696e74206d6f7265207468616e20323020746f6b6560008201527f6e20696e207468652073616d65207472616e73616374696f6e00000000000000602082015250565b60006145d1603983613431565b91506145dc82614575565b604082019050919050565b60006020820190508181036000830152614600816145c4565b9050919050565b7f50726963652063616e2774206265206c6f776572207468616e20300000000000600082015250565b600061463d601b83613431565b915061464882614607565b602082019050919050565b6000602082019050818103600083015261466c81614630565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006146a9601983613431565b91506146b482614673565b602082019050919050565b600060208201905081810360008301526146d88161469c565b9050919050565b7f41697264726f7020776f756c6420657863656564206d617820737570706c792060008201527f6f66204e66747300000000000000000000000000000000000000000000000000602082015250565b600061473b602783613431565b9150614746826146df565b604082019050919050565b6000602082019050818103600083015261476a8161472e565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006147cd602f83613431565b91506147d882614771565b604082019050919050565b600060208201905081810360008301526147fc816147c0565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461483081613cda565b61483a8186614803565b94506001821660008114614855576001811461486657614899565b60ff19831686528186019350614899565b61486f8561480e565b60005b8381101561489157815481890152600182019150602081019050614872565b838801955050505b50505092915050565b60006148ad82613426565b6148b78185614803565b93506148c7818560208601613442565b80840191505092915050565b60006148df8285614823565b91506148eb82846148a2565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614953602683613431565b915061495e826148f7565b604082019050919050565b6000602082019050818103600083015261498281614946565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006149e5602c83613431565b91506149f082614989565b604082019050919050565b60006020820190508181036000830152614a14816149d8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614a77602983613431565b9150614a8282614a1b565b604082019050919050565b60006020820190508181036000830152614aa681614a6a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b09602483613431565b9150614b1482614aad565b604082019050919050565b60006020820190508181036000830152614b3881614afc565b9050919050565b6000614b4a826134e1565b9150614b55836134e1565b925082821015614b6857614b6761437a565b5b828203905092915050565b6000614b7e826134e1565b9150614b89836134e1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bbe57614bbd61437a565b5b828201905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614bff601783614803565b9150614c0a82614bc9565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614c4b601183614803565b9150614c5682614c15565b601182019050919050565b6000614c6c82614bf2565b9150614c7882856148a2565b9150614c8382614c3e565b9150614c8f82846148a2565b91508190509392505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614cd1601b83613431565b9150614cdc82614c9b565b602082019050919050565b60006020820190508181036000830152614d0081614cc4565b9050919050565b6000614d12826134e1565b9150614d1d836134e1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d5657614d5561437a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d9b826134e1565b9150614da6836134e1565b925082614db657614db5614d61565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e1d602183613431565b9150614e2882614dc1565b604082019050919050565b60006020820190508181036000830152614e4c81614e10565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e88816134e1565b82525050565b6000614e9a8383614e7f565b60208301905092915050565b6000602082019050919050565b6000614ebe82614e53565b614ec88185614e5e565b9350614ed383614e6f565b8060005b83811015614f04578151614eeb8882614e8e565b9750614ef683614ea6565b925050600181019050614ed7565b5085935050505092915050565b6000608082019050614f266000830187613576565b614f3360208301866135a0565b8181036040830152614f458185614eb3565b9050614f5460608301846133fc565b95945050505050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b6000614f93601e83613431565b9150614f9e82614f5d565b602082019050919050565b60006020820190508181036000830152614fc281614f86565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615025603283613431565b915061503082614fc9565b604082019050919050565b6000602082019050818103600083015261505481615018565b9050919050565b6000615066826134e1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150985761509761437a565b5b600182019050919050565b60006150ae826134e1565b91506150b9836134e1565b9250826150c9576150c8614d61565b5b828206905092915050565b60006150df826134e1565b9150600082036150f2576150f161437a565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000615133602083613431565b915061513e826150fd565b602082019050919050565b6000602082019050818103600083015261516281615126565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061519082615169565b61519a8185615174565b93506151aa818560208601613442565b6151b381613475565b840191505092915050565b60006080820190506151d36000830187613576565b6151e06020830186613576565b6151ed60408301856135a0565b81810360608301526151ff8184615185565b905095945050505050565b60008151905061521981613397565b92915050565b60006020828403121561523557615234613361565b5b60006152438482850161520a565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615282602083613431565b915061528d8261524c565b602082019050919050565b600060208201905081810360008301526152b181615275565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006152ee601c83613431565b91506152f9826152b8565b602082019050919050565b6000602082019050818103600083015261531d816152e1565b905091905056fea26469706673582212203a002abf2ba7837c6a2a335deb2c5e8cf2381b9c2e86a9da4a157db115b5f71d64736f6c634300080d0033