6080604052661c6bf5263400006009556000600a556122b8600b55610bb8600c556040518060800160405280604381526020016200545260439139600d90805190602001906200005192919062000291565b506001600e60006101000a81548160ff021916908360ff1602179055506032600e60016101000a81548160ff021916908360ff1602179055506001600e60026101000a81548160ff021916908360ff160217905550348015620000b357600080fd5b506040518060400160405280600e81526020017f53776f6c6520417065732e7774660000000000000000000000000000000000008152506040518060400160405280600581526020017f53574f4c4500000000000000000000000000000000000000000000000000000081525081600190805190602001906200013892919062000291565b5080600290805190602001906200015192919062000291565b50600160008190555050506200017c62000170620001c360201b60201c565b620001cb60201b60201c565b33600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003a6565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200029f9062000341565b90600052602060002090601f016020900481019282620002c357600085556200030f565b82601f10620002de57805160ff19168380011785556200030f565b828001600101855582156200030f579182015b828111156200030e578251825591602001919060010190620002f1565b5b5090506200031e919062000322565b5090565b5b808211156200033d57600081600090555060010162000323565b5090565b600060028204905060018216806200035a57607f821691505b6020821081141562000371576200037062000377565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61509c80620003b66000396000f3fe6080604052600436106102665760003560e01c806370db69d611610144578063c03afb59116100b6578063dea96c981161007a578063dea96c98146108de578063dfcf15b01461091b578063e985e9c514610944578063f2fde38b14610981578063f4a0a528146109aa578063f617f920146109d357610266565b8063c03afb59146107fb578063c87b56dd14610824578063ce606ee014610861578063cf1ec4bd1461088c578063dbdf2dc0146108b557610266565b806395d89b411161010857806395d89b4114610701578063a22cb4651461072c578063ad0b4cc314610755578063b14f2a391461077e578063b1c9fe6e146107a7578063b88d4fde146107d257610266565b806370db69d61461064d578063714c539814610678578063715018a6146106a3578063858e83b5146106ba5780638da5cb5b146106d657610266565b80633a3f716a116101dd5780636352211e116101a15780636352211e146105385780636817c76c146105755780636bd08049146105a05780636ecd2306146105c95780636f9fb98a146105e557806370a082311461061057610266565b80633a3f716a146104745780633ccfd60b1461049f57806342842e0e146104a95780634f6ccce7146104d257806355f804b31461050f57610266565b8063081812fc1161022f578063081812fc14610354578063095ea7b31461039157806318160ddd146103ba57806323b872dd146103e55780632f745c591461040e5780633549345e1461044b57610266565b80620e7fa81461026b57806301ffc9a7146102965780630451a9f1146102d3578063047fc9aa146102fe57806306fdde0314610329575b600080fd5b34801561027757600080fd5b506102806109ef565b60405161028d9190614a8c565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190613b81565b6109f5565b6040516102ca919061474f565b60405180910390f35b3480156102df57600080fd5b506102e8610b3f565b6040516102f59190614a8c565b60405180910390f35b34801561030a57600080fd5b50610313610b45565b6040516103209190614a8c565b60405180910390f35b34801561033557600080fd5b5061033e610b4b565b60405161034b919061476a565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190613c14565b610bdd565b60405161038891906146e8565b60405180910390f35b34801561039d57600080fd5b506103b860048036038101906103b39190613aed565b610c62565b005b3480156103c657600080fd5b506103cf610d7b565b6040516103dc9190614a8c565b60405180910390f35b3480156103f157600080fd5b5061040c600480360381019061040791906139e7565b610d91565b005b34801561041a57600080fd5b5061043560048036038101906104309190613aed565b610da1565b6040516104429190614a8c565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190613c14565b610f9f565b005b34801561048057600080fd5b50610489611025565b6040516104969190614aa7565b60405180910390f35b6104a7611038565b005b3480156104b557600080fd5b506104d060048036038101906104cb91906139e7565b61114f565b005b3480156104de57600080fd5b506104f960048036038101906104f49190613c14565b61116f565b6040516105069190614a8c565b60405180910390f35b34801561051b57600080fd5b5061053660048036038101906105319190613bd3565b6111c2565b005b34801561054457600080fd5b5061055f600480360381019061055a9190613c14565b611258565b60405161056c91906146e8565b60405180910390f35b34801561058157600080fd5b5061058a61126e565b6040516105979190614a8c565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190613c14565b611274565b005b6105e360048036038101906105de9190613c3d565b6112fa565b005b3480156105f157600080fd5b506105fa61152e565b6040516106079190614a8c565b60405180910390f35b34801561061c57600080fd5b5061063760048036038101906106329190613959565b6115b2565b6040516106449190614a8c565b60405180910390f35b34801561065957600080fd5b5061066261169b565b60405161066f9190614aa7565b60405180910390f35b34801561068457600080fd5b5061068d6116ae565b60405161069a919061476a565b60405180910390f35b3480156106af57600080fd5b506106b8611740565b005b6106d460048036038101906106cf9190613c3d565b6117c8565b005b3480156106e257600080fd5b506106eb611a55565b6040516106f891906146e8565b60405180910390f35b34801561070d57600080fd5b50610716611a7f565b604051610723919061476a565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190613ab1565b611b11565b005b34801561076157600080fd5b5061077c60048036038101906107779190613c3d565b611c92565b005b34801561078a57600080fd5b506107a560048036038101906107a09190613982565b611d2c565b005b3480156107b357600080fd5b506107bc611dec565b6040516107c99190614aa7565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f49190613a36565b611dff565b005b34801561080757600080fd5b50610822600480360381019061081d9190613c3d565b611e5b565b005b34801561083057600080fd5b5061084b60048036038101906108469190613c14565b611ef5565b604051610858919061476a565b60405180910390f35b34801561086d57600080fd5b50610876611f9d565b60405161088391906146e8565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190613c14565b611fc3565b005b3480156108c157600080fd5b506108dc60048036038101906108d79190613c3d565b612049565b005b3480156108ea57600080fd5b5061090560048036038101906109009190613959565b6120e3565b6040516109129190614aa7565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190613b29565b612103565b005b34801561095057600080fd5b5061096b600480360381019061096691906139ab565b6121fd565b604051610978919061474f565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190613959565b612291565b005b3480156109b657600080fd5b506109d160048036038101906109cc9190613c14565b612389565b005b6109ed60048036038101906109e89190613c3d565b61240f565b005b600a5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ac057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b2857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b385750610b3782612596565b5b9050919050565b600c5481565b600b5481565b606060018054610b5a90614e63565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8690614e63565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b5050505050905090565b6000610be882612600565b610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90614a6c565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6d82611258565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd59061496c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cfd61260d565b73ffffffffffffffffffffffffffffffffffffffff161480610d2c5750610d2b81610d2661260d565b6121fd565b5b610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d629061486c565b60405180910390fd5b610d76838383612615565b505050565b60006001600054610d8c9190614d14565b905090565b610d9c8383836126c7565b505050565b6000610dac836115b2565b8210610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de49061478c565b60405180910390fd5b6000610df7610d7b565b905060008060005b83811015610f5d576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ef157806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f495786841415610f3a578195505050505050610f99565b8380610f4590614e95565b9450505b508080610f5590614e95565b915050610dff565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9090614a2c565b60405180910390fd5b92915050565b610fa761260d565b73ffffffffffffffffffffffffffffffffffffffff16610fc5611a55565b73ffffffffffffffffffffffffffffffffffffffff161461101b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611012906148ec565b60405180910390fd5b80600a8190555050565b600e60029054906101000a900460ff1681565b61104061260d565b73ffffffffffffffffffffffffffffffffffffffff1661105e611a55565b73ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab906148ec565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516110fc906146d3565b60006040518083038185875af1925050503d8060008114611139576040519150601f19603f3d011682016040523d82523d6000602084013e61113e565b606091505b505090508061114c57600080fd5b50565b61116a83838360405180602001604052806000815250611dff565b505050565b6000611179610d7b565b82106111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b1906147ec565b60405180910390fd5b819050919050565b6111ca61260d565b73ffffffffffffffffffffffffffffffffffffffff166111e8611a55565b73ffffffffffffffffffffffffffffffffffffffff161461123e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611235906148ec565b60405180910390fd5b80600d90805190602001906112549291906136cf565b5050565b600061126382612c6e565b600001519050919050565b60095481565b61127c61260d565b73ffffffffffffffffffffffffffffffffffffffff1661129a611a55565b73ffffffffffffffffffffffffffffffffffffffff16146112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e7906148ec565b60405180910390fd5b80600b8190555050565b6003600e60009054906101000a900460ff1660ff161461134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134690614a4c565b60405180910390fd5b600b548160ff1661135e610d7b565b6113689190614bfc565b11156113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a09061484c565b60405180910390fd5b600e60019054906101000a900460ff1660ff1681600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114149190614c52565b60ff161115611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f9061488c565b60405180910390fd5b8060ff166009546114699190614cba565b3410156114ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a29061482c565b60405180910390fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff166115069190614c52565b92506101000a81548160ff021916908360ff16021790555061152b338260ff16612dc9565b50565b600061153861260d565b73ffffffffffffffffffffffffffffffffffffffff16611556611a55565b73ffffffffffffffffffffffffffffffffffffffff16146115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a3906148ec565b60405180910390fd5b47905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a906148ac565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b600e60019054906101000a900460ff1681565b6060600d80546116bd90614e63565b80601f01602080910402602001604051908101604052809291908181526020018280546116e990614e63565b80156117365780601f1061170b57610100808354040283529160200191611736565b820191906000526020600020905b81548152906001019060200180831161171957829003601f168201915b5050505050905090565b61174861260d565b73ffffffffffffffffffffffffffffffffffffffff16611766611a55565b73ffffffffffffffffffffffffffffffffffffffff16146117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b3906148ec565b60405180910390fd5b6117c66000612de7565b565b6002600e60009054906101000a900460ff1660ff161461181d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181490614a4c565b60405180910390fd5b600b548160ff1661182c610d7b565b6118369190614bfc565b1115611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186e9061484c565b60405180910390fd5b600e60029054906101000a900460ff1660ff1681600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118e29190614c52565b60ff161115611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d9061488c565b60405180910390fd5b600c548160ff16611935610d7b565b61193f9190614bfc565b1061197f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611976906149ec565b60405180910390fd5b8060ff16600a546119909190614cba565b3410156119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c99061482c565b60405180910390fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16611a2d9190614c52565b92506101000a81548160ff021916908360ff160217905550611a52338260ff16612dc9565b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611a8e90614e63565b80601f0160208091040260200160405190810160405280929190818152602001828054611aba90614e63565b8015611b075780601f10611adc57610100808354040283529160200191611b07565b820191906000526020600020905b815481529060010190602001808311611aea57829003601f168201915b5050505050905090565b611b1961260d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7e9061492c565b60405180910390fd5b8060066000611b9461260d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c4161260d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c86919061474f565b60405180910390a35050565b611c9a61260d565b73ffffffffffffffffffffffffffffffffffffffff16611cb8611a55565b73ffffffffffffffffffffffffffffffffffffffff1614611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d05906148ec565b60405180910390fd5b80600e60026101000a81548160ff021916908360ff16021790555050565b611d3461260d565b73ffffffffffffffffffffffffffffffffffffffff16611d52611a55565b73ffffffffffffffffffffffffffffffffffffffff1614611da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9f906148ec565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60009054906101000a900460ff1681565b611e0a8484846126c7565b611e1684848484612ead565b611e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c906149ac565b60405180910390fd5b50505050565b611e6361260d565b73ffffffffffffffffffffffffffffffffffffffff16611e81611a55565b73ffffffffffffffffffffffffffffffffffffffff1614611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906148ec565b60405180910390fd5b80600e60006101000a81548160ff021916908360ff16021790555050565b6060611f0082612600565b611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f369061490c565b60405180910390fd5b6000600d8054611f4e90614e63565b905011611f6a5760405180602001604052806000815250611f96565b600d611f7583613044565b604051602001611f869291906146a4565b6040516020818303038152906040525b9050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fcb61260d565b73ffffffffffffffffffffffffffffffffffffffff16611fe9611a55565b73ffffffffffffffffffffffffffffffffffffffff161461203f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612036906148ec565b60405180910390fd5b80600c8190555050565b61205161260d565b73ffffffffffffffffffffffffffffffffffffffff1661206f611a55565b73ffffffffffffffffffffffffffffffffffffffff16146120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc906148ec565b60405180910390fd5b80600e60016101000a81548160ff021916908360ff16021790555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b61210b61260d565b73ffffffffffffffffffffffffffffffffffffffff16612129611a55565b73ffffffffffffffffffffffffffffffffffffffff161461217f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612176906148ec565b60405180910390fd5b60005b838390508110156121f7576121e48484838181106121c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906121de9190613959565b83612dc9565b80806121ef90614e95565b915050612182565b50505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61229961260d565b73ffffffffffffffffffffffffffffffffffffffff166122b7611a55565b73ffffffffffffffffffffffffffffffffffffffff161461230d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612304906148ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561237d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612374906147ac565b60405180910390fd5b61238681612de7565b50565b61239161260d565b73ffffffffffffffffffffffffffffffffffffffff166123af611a55565b73ffffffffffffffffffffffffffffffffffffffff1614612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc906148ec565b60405180910390fd5b8060098190555050565b6000600e60009054906101000a900460ff1660ff1614612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90614a4c565b60405180910390fd5b600e60029054906101000a900460ff1660ff1681600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124cf9190614c52565b60ff161115612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250a9061488c565b60405180910390fd5b80600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff1661256e9190614c52565b92506101000a81548160ff021916908360ff160217905550612593338260ff16612dc9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006126d282612c6e565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166126f961260d565b73ffffffffffffffffffffffffffffffffffffffff161480612755575061271e61260d565b73ffffffffffffffffffffffffffffffffffffffff1661273d84610bdd565b73ffffffffffffffffffffffffffffffffffffffff16145b806127715750612770826000015161276b61260d565b6121fd565b5b9050806127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa9061494c565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281c906148cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288c9061480c565b60405180910390fd5b6128a285858560016131f1565b6128b26000848460000151612615565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612ab89190614bfc565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bfe57612b2e81612600565b15612bfd576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c6686868660016131f7565b505050505050565b612c76613755565b612c7f82612600565b612cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb5906147cc565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612db0578092505050612dc4565b508080612dbc90614e39565b915050612cc4565b919050565b612de38282604051806020016040528060008152506131fd565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612ece8473ffffffffffffffffffffffffffffffffffffffff166136bc565b15613037578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ef761260d565b8786866040518563ffffffff1660e01b8152600401612f199493929190614703565b602060405180830381600087803b158015612f3357600080fd5b505af1925050508015612f6457506040513d601f19601f82011682018060405250810190612f619190613baa565b60015b612fe7573d8060008114612f94576040519150601f19603f3d011682016040523d82523d6000602084013e612f99565b606091505b50600081511415612fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd6906149ac565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061303c565b600190505b949350505050565b6060600082141561308c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131ec565b600082905060005b600082146130be5780806130a790614e95565b915050600a826130b79190614c89565b9150613094565b60008167ffffffffffffffff811115613100577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156131325781602001600182028036833780820191505090505b5090505b600085146131e55760018261314b9190614d14565b9150600a8561315a9190614ede565b60306131669190614bfc565b60f81b8183815181106131a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131de9190614c89565b9450613136565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326a90614a0c565b60405180910390fd5b61327c81612600565b156132bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b3906149cc565b60405180910390fd5b600083116132ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f69061498c565b60405180910390fd5b61330c60008583866131f1565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516134099190614bb6565b6fffffffffffffffffffffffffffffffff1681526020018583602001516134309190614bb6565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561369f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461363f6000888488612ead565b61367e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613675906149ac565b60405180910390fd5b818061368990614e95565b925050808061369790614e95565b9150506135ce565b50806000819055506136b460008785886131f7565b505050505050565b600080823b905060008111915050919050565b8280546136db90614e63565b90600052602060002090601f0160209004810192826136fd5760008555613744565b82601f1061371657805160ff1916838001178555613744565b82800160010185558215613744579182015b82811115613743578251825591602001919060010190613728565b5b509050613751919061378f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156137a8576000816000905550600101613790565b5090565b60006137bf6137ba84614af3565b614ac2565b9050828152602081018484840111156137d757600080fd5b6137e2848285614df7565b509392505050565b60006137fd6137f884614b23565b614ac2565b90508281526020810184848401111561381557600080fd5b613820848285614df7565b509392505050565b60008135905061383781614fdc565b92915050565b60008135905061384c81614ff3565b92915050565b60008083601f84011261386457600080fd5b8235905067ffffffffffffffff81111561387d57600080fd5b60208301915083602082028301111561389557600080fd5b9250929050565b6000813590506138ab8161500a565b92915050565b6000813590506138c081615021565b92915050565b6000815190506138d581615021565b92915050565b600082601f8301126138ec57600080fd5b81356138fc8482602086016137ac565b91505092915050565b600082601f83011261391657600080fd5b81356139268482602086016137ea565b91505092915050565b60008135905061393e81615038565b92915050565b6000813590506139538161504f565b92915050565b60006020828403121561396b57600080fd5b600061397984828501613828565b91505092915050565b60006020828403121561399457600080fd5b60006139a28482850161383d565b91505092915050565b600080604083850312156139be57600080fd5b60006139cc85828601613828565b92505060206139dd85828601613828565b9150509250929050565b6000806000606084860312156139fc57600080fd5b6000613a0a86828701613828565b9350506020613a1b86828701613828565b9250506040613a2c8682870161392f565b9150509250925092565b60008060008060808587031215613a4c57600080fd5b6000613a5a87828801613828565b9450506020613a6b87828801613828565b9350506040613a7c8782880161392f565b925050606085013567ffffffffffffffff811115613a9957600080fd5b613aa5878288016138db565b91505092959194509250565b60008060408385031215613ac457600080fd5b6000613ad285828601613828565b9250506020613ae38582860161389c565b9150509250929050565b60008060408385031215613b0057600080fd5b6000613b0e85828601613828565b9250506020613b1f8582860161392f565b9150509250929050565b600080600060408486031215613b3e57600080fd5b600084013567ffffffffffffffff811115613b5857600080fd5b613b6486828701613852565b93509350506020613b778682870161392f565b9150509250925092565b600060208284031215613b9357600080fd5b6000613ba1848285016138b1565b91505092915050565b600060208284031215613bbc57600080fd5b6000613bca848285016138c6565b91505092915050565b600060208284031215613be557600080fd5b600082013567ffffffffffffffff811115613bff57600080fd5b613c0b84828501613905565b91505092915050565b600060208284031215613c2657600080fd5b6000613c348482850161392f565b91505092915050565b600060208284031215613c4f57600080fd5b6000613c5d84828501613944565b91505092915050565b613c6f81614d48565b82525050565b613c7e81614d6c565b82525050565b6000613c8f82614b68565b613c998185614b7e565b9350613ca9818560208601614e06565b613cb281614fcb565b840191505092915050565b6000613cc882614b73565b613cd28185614b9a565b9350613ce2818560208601614e06565b613ceb81614fcb565b840191505092915050565b6000613d0182614b73565b613d0b8185614bab565b9350613d1b818560208601614e06565b80840191505092915050565b60008154613d3481614e63565b613d3e8186614bab565b94506001821660008114613d595760018114613d6a57613d9d565b60ff19831686528186019350613d9d565b613d7385614b53565b60005b83811015613d9557815481890152600182019150602081019050613d76565b838801955050505b50505092915050565b6000613db3602283614b9a565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e19602683614b9a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e7f602a83614b9a565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ee5602383614b9a565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f4b602583614b9a565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fb1601283614b9a565b91507f496e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b6000613ff1602983614b9a565b91507f596f752063616e2774206d696e74206d6f7265207468656e2074686520746f7460008301527f616c20737570706c7900000000000000000000000000000000000000000000006020830152604082019050919050565b6000614057603983614b9a565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b60006140bd601183614b9a565b91507f427579206c696d697420726561636865640000000000000000000000000000006000830152602082019050919050565b60006140fd602b83614b9a565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b6000614163602683614b9a565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141c9600583614bab565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000614209602083614b9a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614249602f83614b9a565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006142af601a83614b9a565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b60006142ef603283614b9a565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000614355602283614b9a565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143bb600083614b8f565b9150600082019050919050565b60006143d5602383614b9a565b91507f455243373231413a207175616e74697479206d7573742062652067726561746560008301527f72203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061443b603383614b9a565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b60006144a1601d83614b9a565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b60006144e1602083614b9a565b91507f416c6c2066726565206d696e74732068617665206265656e20636c61696d65646000830152602082019050919050565b6000614521602183614b9a565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614587602e83614b9a565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b60006145ed601983614b9a565b91507f546869732073616c6520686173206e6f742073746172746564000000000000006000830152602082019050919050565b600061462d602d83614b9a565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b61468f81614de0565b82525050565b61469e81614dea565b82525050565b60006146b08285613d27565b91506146bc8284613cf6565b91506146c7826141bc565b91508190509392505050565b60006146de826143ae565b9150819050919050565b60006020820190506146fd6000830184613c66565b92915050565b60006080820190506147186000830187613c66565b6147256020830186613c66565b6147326040830185614686565b81810360608301526147448184613c84565b905095945050505050565b60006020820190506147646000830184613c75565b92915050565b600060208201905081810360008301526147848184613cbd565b905092915050565b600060208201905081810360008301526147a581613da6565b9050919050565b600060208201905081810360008301526147c581613e0c565b9050919050565b600060208201905081810360008301526147e581613e72565b9050919050565b6000602082019050818103600083015261480581613ed8565b9050919050565b6000602082019050818103600083015261482581613f3e565b9050919050565b6000602082019050818103600083015261484581613fa4565b9050919050565b6000602082019050818103600083015261486581613fe4565b9050919050565b600060208201905081810360008301526148858161404a565b9050919050565b600060208201905081810360008301526148a5816140b0565b9050919050565b600060208201905081810360008301526148c5816140f0565b9050919050565b600060208201905081810360008301526148e581614156565b9050919050565b60006020820190508181036000830152614905816141fc565b9050919050565b600060208201905081810360008301526149258161423c565b9050919050565b60006020820190508181036000830152614945816142a2565b9050919050565b60006020820190508181036000830152614965816142e2565b9050919050565b6000602082019050818103600083015261498581614348565b9050919050565b600060208201905081810360008301526149a5816143c8565b9050919050565b600060208201905081810360008301526149c58161442e565b9050919050565b600060208201905081810360008301526149e581614494565b9050919050565b60006020820190508181036000830152614a05816144d4565b9050919050565b60006020820190508181036000830152614a2581614514565b9050919050565b60006020820190508181036000830152614a458161457a565b9050919050565b60006020820190508181036000830152614a65816145e0565b9050919050565b60006020820190508181036000830152614a8581614620565b9050919050565b6000602082019050614aa16000830184614686565b92915050565b6000602082019050614abc6000830184614695565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614ae957614ae8614f9c565b5b8060405250919050565b600067ffffffffffffffff821115614b0e57614b0d614f9c565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614b3e57614b3d614f9c565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614bc182614da4565b9150614bcc83614da4565b9250826fffffffffffffffffffffffffffffffff03821115614bf157614bf0614f0f565b5b828201905092915050565b6000614c0782614de0565b9150614c1283614de0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c4757614c46614f0f565b5b828201905092915050565b6000614c5d82614dea565b9150614c6883614dea565b92508260ff03821115614c7e57614c7d614f0f565b5b828201905092915050565b6000614c9482614de0565b9150614c9f83614de0565b925082614caf57614cae614f3e565b5b828204905092915050565b6000614cc582614de0565b9150614cd083614de0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d0957614d08614f0f565b5b828202905092915050565b6000614d1f82614de0565b9150614d2a83614de0565b925082821015614d3d57614d3c614f0f565b5b828203905092915050565b6000614d5382614dc0565b9050919050565b6000614d6582614dc0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614e24578082015181840152602081019050614e09565b83811115614e33576000848401525b50505050565b6000614e4482614de0565b91506000821415614e5857614e57614f0f565b5b600182039050919050565b60006002820490506001821680614e7b57607f821691505b60208210811415614e8f57614e8e614f6d565b5b50919050565b6000614ea082614de0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ed357614ed2614f0f565b5b600182019050919050565b6000614ee982614de0565b9150614ef483614de0565b925082614f0457614f03614f3e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614fe581614d48565b8114614ff057600080fd5b50565b614ffc81614d5a565b811461500757600080fd5b50565b61501381614d6c565b811461501e57600080fd5b50565b61502a81614d78565b811461503557600080fd5b50565b61504181614de0565b811461504c57600080fd5b50565b61505881614dea565b811461506357600080fd5b5056fea26469706673582212201875a87f6a6afb869e7d39360e7de9d64af8d9f068b1aa0e94f34cbd692701e164736f6c63430008000033697066733a2f2f62616679626569667a6470337371776c35706e76787874716b36337677757769727675766972767933616f347561687170357a336f6670697a6f692f